
Fri, 9 Feb 2001 11:48:33 -0500, Dylan Thurston
class (Show a, Read a, Eq a) => Comfortable a instance (Show a, Read a, Eq a) => Comfortable a
Why isn't it legal?
Because in Haskell 98 instance's head must be of the form of a type constructor applied to type variables. Here it's a type variable.
I just tried it, and Hugs accepted it, with or without extensions.
My Hugs does not accept it without extensions. ghc does not accept it by default. ghc -fglasgow-exts accepts an instance's head which is a type constructor applied to some other types than just type variables (e.g. instance Foo [Char]), and -fallow-undecidable-instances lets it accept the above too. I forgot that it can make context reduction infinite unless the compiler does extra checking to prevent this. I guess that making it legal keeps the type system decidable, only compilers would have to introduce some extra checks. Try the following module: ------------------------------------------------------------------------ module Test where class Foo a where foo :: a class Bar a where bar :: a class Baz a where baz :: a instance Foo a => Bar a where bar = foo instance Bar a => Baz a where baz = bar instance Baz a => Foo a where foo = baz f = foo ------------------------------------------------------------------------ Both hugs -98 and ghc -fglasgow-exts -fallow-undecidable-instances reach their limits of context reduction steps. -- __("< Marcin Kowalczyk * qrczak@knm.org.pl http://qrczak.ids.net.pl/ \__/ ^^ SYGNATURA ZASTÊPCZA QRCZAK