[GHC] #7788: Recursive type family causes <<loop>>
GHC
ghc-devs at haskell.org
Sat Jan 24 18:23:45 UTC 2015
#7788: Recursive type family causes <<loop>>
-------------------------------------+-------------------------------------
Reporter: shachaf | Owner: simonpj
Type: bug | Status: new
Priority: high | Milestone: 7.10.1
Component: Compiler (Type | Version: 7.6.2
checker) | Keywords:
Resolution: | Architecture:
Operating System: Unknown/Multiple | Unknown/Multiple
Type of failure: Incorrect result | Test Case:
at runtime | Blocking:
Blocked By: | Differential Revisions:
Related Tickets: |
-------------------------------------+-------------------------------------
Comment (by int-e):
Replying to [comment:6 goldfire]:
> But, with 7.10, the following doesn't:
>
> {{{
> type family F a where
> F a = F a
>
> id2 :: F a -> F a
> id2 x = x
> }}}
>
> This is slightly disturbing because `id2` is merely a specialization of
`id`.
I think this is wrong: `id2` does not have a type at all, and therefore
does not specialize `id`.
The same is true for the original example. If one looks at the code
generated by ghc-7.8.3, it tries to produce a witness for {{{F (Fix Id)}}}
being a type, and `foo` checks that witness (which fails, producing the
observed {{{<<loop>>}}}) before producing `undefined`:
{{{
-- core, with some non-essential parts omitted
cobox_rVz :: Main.F (Main.Fix Main.Id) ~ GHC.Prim.Any
cobox_rVz = cobox_rVz
foo :: Main.Proxy (Main.F (Main.Fix Main.Id)) -> ()
foo = case cobox_rVz of GHC.Types.Eq# _ -> undefined
}}}
That said it's unfortunate that GHC 7.10 loops rather than erroring out
for these examples.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/7788#comment:10>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list