【发布时间】:2016-04-30 01:48:04
【问题描述】:
我目前正在使用 Haskell 中的 ADT,并尝试构建一个 ADT Figure:
data Figure = Rect { x :: Integer, y :: Integer, width :: Integer, height :: Integer}
| Circle { x :: Integer, y :: Integer, radius :: Integer}
| CombiFigure Figure Figure
deriving (Eq, Show, Read)
现在我遇到了一个问题,即如何实现一个不应接受每个 Figure 的函数,但例如只有Circle。
我是否已经有一个糟糕的设计?还是有一些最佳实践如何做到这一点?
例如,考虑一个直径函数。我想到的所有(我是 Haskell 的初学者)都是以下两个选项,使用 undefined 或 Maybe:
1:
diameter :: Figure -> Integer
diameter (Circle _ _ r) = 2 * r
diameter _ = undefined
2:
diameter :: Figure -> Maybe Integer
diameter (Circle _ _ r) = Just (2 * r)
diameter _ = Nothing
有没有更可取的方法来实现这一目标? 谢谢!
【问题讨论】:
标签: haskell pattern-matching algebraic-data-types maybe undefined-function