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
[email protected]
http://www.haskell.org/mailman/listinfo/ghc-devs