以下代码来自Hutton的 Haskell编程(第101页)。
data Shape = Circle Float | Rect Float Float
square :: Float -> Shape
square n = Rect n n
area : Shape -> Float
area(Rect x y) = x * y
在ghci中,如果我输入区域(Rect 3 5),我得到15。
但是如果我键入square 5(因为我认为我会得到Rect 5 5),我收到一条错误信息:
"使用'print'时没有(Show Shape)的实例
在交互式GHCi命令中:打印它"。
为什么?
答案 0 :(得分:3)
在幕后,GHCi试图致电print (square 5)
。不幸的是,这需要Shape
来实现称为Show
类型类的东西。您可以通过将deriving Show
添加到data Shape = Circle Float | Rect Float Float deriving Show
的末尾来消除错误。
有great section on the Show
typeclass in Learn You a Haskell和a great answer on deriving in Stack Overflow。