[Haskell-beginners] Typeclass problems
Stephen Blackheath [to Haskell-Beginners]
mutilating.cauliflowers.stephen at blacksapphire.com
Thu Feb 4 17:30:32 EST 2010
I fixed it by adding a type signature to this line:
gen = map (const (1::Int))
The problem is that the literal '1' is of type Num t => t, which is
never tied to a concrete type anywhere. It has to know the type
definitely before it can decide which type class to use.
Patrick LeBoutillier wrote:
> Hi all,
> I've written a small type class that is meant to behave a bit like Show:
> class Show a => Echo a where
> echo :: a -> String
> echoList :: [a] -> String
> echoListSep :: a -> String
> echo = show
> echoListSep _ = " "
> echoList  = ""
> echoList [x] = echo x
> echoList (x:xs) = echo x ++ echoListSep x ++ echoList xs
> instance Echo Char where
> echo c = [c]
> echoListSep _ = ""
> instance Echo a => Echo [a] where
> echo = echoList
> instance Echo Int where
> instance Echo Integer where
> instance Echo Double where
> instance Echo Float where
> gen = map (const 1)
> f xs = map echo $ gen xs
> However the code doesn't compile on the last line.
> But it does compile if I replace 'echo' with 'show'.
> What's missing to make my typeclass behave like Show and accept input
> of any type (besides all the missing instances...)?
> I looked at the code for Show but I didn't see anything that looked "magical"...
More information about the Beginners