adam: > I am trying to create an instance of a class for String types. I have > the following: > > class Foo a where > mkFoo :: a -> String > > instance Foo String where > mkFoo x = x > > and receive the following error: > > test.hs:9:0: > Illegal instance declaration for `Foo String' > (The instance type must be of form (T a b c) > where T is not a synonym, and a,b,c are distinct type > variables) > In the instance declaration for `Foo String' > Failed, modules loaded: none. > > I see that in general I am not able to create an instance of a class for any > type [a], where a is a specific type.
Ok. > class Foo a where > mkFoo :: a -> String N.B. The instance type must be of form (T a b c), where T is not a synonym. One portable solution, introduce a newtype. > newtype Strung = S String > instance Foo Strung where > mkFoo (S x) = x *Main> mkFoo (S "foo") "foo" Alternatively, use -fglasgow-exts :) > instance Foo String where > mkFoo = id $ ghci -fglasgow-exts A.hs *Main> mkFoo "foo" "foo" -- Don _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
