On Jun 19, 2015 2:29 PM, "Richard Eisenberg" <eir@cis.upenn.edu> wrote:
> With a closed family, you could always do something like this:
>
> > type family Error (msg :: Symbol) -- no instances!
> > type family Sub a b where
> > -- real work
> > Sub a b = Error "Sub is undefined here"
>
> Would that help? It still doesn't immediately error (there's no way to do that currently), but it's perhaps more telling to have an error string.
Ghc does error out right away if you give it an infinite loop:
type family Fail (x::k) (a :: *) where
Fail x a = Fail x (Fail "don't raise the context stack please" a)
-- defining f leads to compile failure, and the message includes the "msg"
f :: Fail "msg" ()
f = undefined
But it would be nice to have a less hacky solution, especially as this one gives error messages that suggest giving the type checker more resources.
Regards,
Adam