[Haskell-cafe] Class
Bulat Ziganshin
bulat.ziganshin at gmail.com
Thu Nov 2 09:42:32 EST 2006
Hello Slavomir,
Thursday, November 2, 2006, 4:42:21 PM, you wrote:
> instance Show a => Visible a where
> toString = show
> size = length . show
> instance Visible a => Visible [a] where
> toString = concat . map toString
> size = foldl (+) 0 . map size
> Illegal instance declaration for `Visible a'
> (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 `Visible a'
> Failed, modules loaded: none.
> at instance Show a => Visible a where.
> Probably I should reconsider my expectations? How should something
> like this designed?
1) i'm still highly recommend you wiki i've pointed before. i'd a lot
of similar problems until i realized that haskell classes are somethat
different form c++ ones
2) there are some proposals that will allow one to specify
anti-conditions or priority of declarations. but currently compiler
has no way to distinguish that instance should be used, for example,
for [Char] - both are good enough.
you may use -fglasgow-exts to supress this error message and and then
-fallow-incoherent-instances to allow compiler select random
definition from these two. you should look into ghc documentation for
more details about it
in practice, i just define required function bodies and then declare
all specific instances i need:
toString1 = concat . map toString
size1 = foldl (+) 0 . map size
instance Visible [Char] where
toString = toString1
size = size1
instance Visible [Int] where
toString = toString1
size = size1
--
Best regards,
Bulat mailto:Bulat.Ziganshin at gmail.com
More information about the Haskell-Cafe
mailing list