Integers
次のように機能するように、繰り返しタイプの表現を定義します。
data Integers = Zero | Next Integers | Prev Integers
そして、この表現、クラスNumのインスタンスを作成します。これは、で使用できることを意味します(+), (*), (==), abs, signum, show
。Integers
今まで私はこのようにsthを定義しました:
data Integers = Zero | Integers Int deriving (Show)
next :: Integers -> Integers
next Zero = Integers 1
next (Integers a) = Integers a + Integers 1
prev :: Integers -> Integers
prev (Integers 1) = Zero
prev (Integers a) = Integers a - Integers 1
instance Eq Integers where
Zero == Zero = True
Integers a == Integers b = a == b
_ == _ = False
instance Num Integers where
Integers a + Integers b = Integers (a + b)
Integers a - Integers b = Integers (a - b)
Integers a * Integers b = Integers (a * b)
abs (Integers a) = Integers (abs a)
signum (Integers a) = Integers (signum a)
fromInteger a = Integers (fromInteger a)
data Integers = Zero | Next Integers | Prev Integers
しかし、それは期待に合いません