【发布时间】:2016-01-23 11:25:06
【问题描述】:
我刚刚学习 Haskell,想开发我的第一个递归 ADT。
我的数据类型Figure 应该能够表示矩形和圆形的任意组合,方法area 应该计算图形的总面积(忽略重叠)。
问题在于,例如矩形,宽度和高度是Integer,而面积的结果应该是Double(或者至少是一个浮点数)。
data Figure = Rect { x :: Integer, y :: Integer, width :: Integer, height :: Integer}
| Circle { x :: Integer, y :: Integer, radius :: Integer}
| CombiFigure Figure Figure
deriving (Eq, Read, Show)
area :: Figure -> Double
area (Rect _ _ w h) = (w * h) -- Integer * Integer, does not work
area (Circle _ _ r) = (pi * r * r) -- (Floating a => a) * Integer * Integer, does not work
area (CombiFigure first second) = (area first) + (area second) -- Double * Double, works
你能告诉我如何解决这个问题吗?结果不是必须是Double,而是一些用于圆面积计算的浮点数。
【问题讨论】:
标签: haskell type-conversion typeclass algebraic-data-types