I'm improving my patch for injective type families and I have a question about error handling in the renamer. If I write this incorrect definition:
type family F a b = r | r -> c I get these errors: T6018rnfail.hs:36:1: Not in scope: type variable ācā T6018rnfail.hs:36:26: Unexpected type variable on the RHS of injectivity condition: ācā All variables should be bound in type family head and appear at most once in exactly the same order as they were bound. I don't want to report two errors here, just the first one. This means I have to first run the renaming using RnTypes.rnTyVar and check if it reports errors. If it does I don't report the extra error. The question is how do I check if this piece of code returns errors: injFrom' <- rnTyVar True injFrom injTo' <- mapM (rnTyVar True) injTo I found some combinators in TcRnMonad (tryTc and friends) but I don't know how to use them. Ideally I'd want `TcRn a -> TcRn (Messages, a)` + isEmptyMessages but the existing combinators return `TcRn a -> TcRn (Messages, Maybe a)`. I'm not at all happy with getting Nothing - even if renaming fails my function has to return a result. Jan _______________________________________________ ghc-devs mailing list ghc-devs@haskell.org http://www.haskell.org/mailman/listinfo/ghc-devs