logo       

RE: can't derive Monad: msg#00078

lang.haskell.glasgow.bugs

Subject: RE: can't derive Monad

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: glasgow-haskell-bugs-admin@xxxxxxxxxxx
[mailto:glasgow-haskell-bugs-admin@xxxxxxxxxxx] On
| Behalf Of Dean Herington
| Sent: 28 July 2003 23:01
| To: glasgow-haskell-bugs@xxxxxxxxxxx
| 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
| Glasgow-haskell-bugs@xxxxxxxxxxx
| http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs


<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise