Log message for: Fix a nasty recursive loop in typechecking interface files
authorsimonpj@microsoft.com <unknown>
Thu, 11 Jan 2007 09:02:52 +0000 (09:02 +0000)
committersimonpj@microsoft.com <unknown>
Thu, 11 Jan 2007 09:02:52 +0000 (09:02 +0000)
commit604afcb5b9c06bee56d3a89f5d0bcdb793bbfb10
treefa474e48e5f6dd1cb7baf609da02b72a36a6ce3f
parent1517ef883f04f1036809978f6639a0104d741073
Log message for: Fix a nasty recursive loop in typechecking interface files

(Alas, Darcs failed to record my log-message for the above patch,
so this patch is an attempt to add the log message retrospectively.)

Roman found a case where the type-checker for interface files
would go into a loop.  Here it is:

  module BarAT where
    class Foo a where
      data FooT a :: *
      int :: FooT a -> Int

  module Baz where
    import BarAT
    foo :: FooT Int -> Int
    foo = foo

The trouble turned out to be that Foo gives rise to a *newtype*,
and using a newtpe caused a little bit too much strictness in
BuildTyCl.mkNewTyConRhs.  Specifically, mkNewTypeCoercion did pattern
matching, which forced the call to eta_reduce in mkNewTyConRhs.

This is all too delicate really.  But for now I've fixed the bug,
and added an explanatory comment.  I'll add a test for it, in
indexed-types/should_compile/ATLoop
compiler/iface/BuildTyCl.lhs