Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
178 views
in Technique[技术] by (71.8m points)

instance Show haskell

I got a data type "Cake"

*data Cake = EmptyBox | Food { name :: String
                                , flavors :: [Cake]} deriving( Read, Eq)*

instance Show Cake where
  show cake = prints cake where
   prints (Food name []) = name ++ "
"

I want to print cakes like this (each cake got different flavors)

Cake1
  Chocolate
  Nutella
    Strawberry
Cake2
  Chocolate
  Vanilla
Cake3

But I got error, doesn't works! How can I do it?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Since prints :: Cake -> String and flavors :: [Cake], we know

map prints flavors :: [String]

But this doesn't jive with the context in which it is used, since in

" " ++ expr

the " " is clearly a String and we therefore expect expr to be a String and not a [String].

To fix this, you should write or find a function which converts your [String] into a String in some way -- there are many candidate behaviors for this type, so you should decide what behavior you want and then find a way to achieve that behavior.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...