1
我剛剛學習Haskell,並希望開發我的第一個遞歸ADT。如何將Integer * Integer乘法的結果轉換爲Double?
我的數據類型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
並不是強制性的,但是用於圓區域計算的一些浮點數。
看到https://wiki.haskell.org/Converting_numbers –