[Haskell-cafe] [Haskell-beginners] No instance for (Show a)

Mark Spezzano mark.spezzano at chariot.net.au
Sun Jul 31 11:26:20 CEST 2011


Hi,

You might need a class constraint.

instance (Show a) => Show (Stack a) where

This basically lets Haskell know that if your "a" type is Showable then "Stack a" is also Showable.

Let me know if this works.

Cheers,

Mark Spezzano


On 31/07/2011, at 6:49 PM, Ovidiu Deac wrote:

> For some reason ghc complains about not being able to call show on an
> Integer (?!?!?)
> 
> Please enlighten me!
> 
> ovidiu
> 
> This is the hspec:
>    it "shows one element"
>        ( show (push 1 EmptyStack) ≡ "Stack(1)")
> 
> ...this is the code:
> 
> data Stack a =
>    EmptyStack |
>    StackEntry a (Stack a)
>    deriving(Eq)
> 
> 
> instance Show (Stack a) where
>    show s =
>        "Stack(" ⊕ (showImpl s) ⊕ ")"
>        where
>            showImpl EmptyStack = ""
>            showImpl (StackEntry x _) = show x
> 
> ...and this is the error:
> 
> src/Stack.hs:12:22:
>    No instance for (Show a)
>      arising from a use of `showImpl'
>    In the first argument of `(++)', namely `(showImpl s)'
>    In the second argument of `(++)', namely `(showImpl s) ++ ")"'
>    In the expression: "Stack(" ++ (showImpl s) ++ ")"
> 
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://www.haskell.org/mailman/listinfo/beginners




More information about the Haskell-Cafe mailing list