Re: [GHC] #7788: Recursive type family causes <<loop>>

#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 goldfire): Here's what I'm worried about here. This function is clearly very innocent: {{{ id :: a -> a id x = x }}} It compiles, obviously, without complaint. 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 there is an easy solution here, though: allow users to disable the optimisation that we've put into !TcFlatten (`try_to_reduce`). If a user says `-flazier-type-families`, then we turn off the optimization. Most type-family-heavy programs will simply compile much more slowly... but a few will compile in finite time that didn't previously. As a separate solution here, we probably should also detect when we're looping while evaluating a type family by tracking evaluation depth. I'd much rather get an error saying we've blown a limited stack size than to just loop. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/7788#comment:6 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler
participants (1)
-
GHC