私は現在、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
今、私は、すべてを受け入れるのではなく、たとえば a のみを受け入れる関数を実装する方法という質問に出くわしましたCircle
。
私はすでに悪いデザインを持っていますか?または、これを行うためのベストプラクティスはありますか?
例として、直径関数について考えてみましょう。私の頭に浮かんだのは (私は Haskell の完全な初心者です)、undefined
orを使用した次の 2 つのオプションだけ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
それを達成するためのより好ましい方法はありますか?ありがとう!