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

Reply via email to