Just conservatism. Imagine newtype T = MkT [T] deriving(Eq)
You'd get instance Eq [T] => Eq T which will make the type checker loop for sure. I'm not sure what a safe approximation might be. But I'll put your example in a comment in the source code as an example of a safe one that's rejected! Simon | -----Original Message----- | From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On | Behalf Of Dean Herington | Sent: 28 July 2003 23:01 | To: [EMAIL PROTECTED] | Subject: can't derive Monad | | The following may not be a bug, but it surprised me. Why does the | circularity cause GHC fits? | | | swan(106)% cat NestStateT.hs | {-# OPTIONS -fglasgow-exts #-} | | import Control.Monad.State | | newtype S1 = S1 [T1 ()] | newtype T1 a = T1 (StateT S1 IO a ) | deriving Monad | | main = undefined | swan(105)% ghci NestStateT.hs | ___ ___ _ | / _ \ /\ /\/ __(_) | / /_\// /_/ / / | | GHC Interactive, version 5.04.3, for Haskell | 98. | / /_\\/ __ / /___| | http://www.haskell.org/ghc/ | \____/\/ /_/\____/|_| Type :? for help. | | Loading package base ... linking ... done. | Loading package haskell98 ... linking ... done. | Compiling Main ( NestStateT.hs, interpreted ) | | NestStateT.hs:6: | Can't make a derived instance of `Monad T1' | (too hard for cunning newtype deriving) | When deriving instances for type `T1' | Failed, modules loaded: none. | Prelude> | | | _______________________________________________ | Glasgow-haskell-bugs mailing list | [EMAIL PROTECTED] | http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs _______________________________________________ Glasgow-haskell-bugs mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs