Haskell数据声明

时间:2016-05-04 18:58:23

标签: haskell

以下代码来自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命令中:打印它"。

为什么?

1 个答案:

答案 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 Haskella great answer on deriving in Stack Overflow