Home > front end >  How to implement and instance of Show manually?
How to implement and instance of Show manually?

Time:10-31

I am learning to use typeclasses in haskell.

The following code works.

data Mood = Blah | Woot deriving (Show)
changeMood :: Mood -> Mood
changeMood Blah = Woot
changeMood Woot = Blah

main = do
    print (changeMood Blah)
    print (changeMood Woot)

But the following gives error error: Not in scope: data constructor ‘Mood’.

data Mood = Blah | Woot
changeMood :: Mood -> Mood
changeMood Blah = Woot
changeMood Woot = Blah

instance Show Mood where
    show(Mood x) = "Mood: "    show(x)

main = do
    print (changeMood Blah)
    print (changeMood Woot)

How can I make the second code work (implement show function).

CodePudding user response:

Mood is a type, not a value. It can be used only in type signatures, after ::, and in constraints (as in instance Show Mood).

The values are Blah and Woot, so use those:

instance Show Mood where
    show Blah = "Mood: Blah"
    show Woot = "Mood: Woot"
  • Related