関連: 068
ペアへの bind (例 let (q, r) = divMod n d など)がまだできないため、 Integral クラス、インスタンス定義は問題を回避した記述になっている。
class (Enum a) => Integral a where quot, rem :: a -> a -> a div, mod :: a -> a -> a quotRem, divMod :: a -> a -> (a, a) toInteger :: a -> Integer -- Minimal complete definition: quotRem, toInteger n `quot` d = fst $ quotRem n d n `rem` d = snd $ quotRem n d n `div` d = fst $ divMod n d n `mod` d = snd $ divMod n d {- n `quot` d = q where (,) q r = quotRem n d n `rem` d = r where (,) q r = quotRem n d n `div` d = q where (,) q r = divMod n d n `mod` d = r where (,) q r = divMod n d divMod n d = if sinum r == - signum d then (q-1, r+d) else (q, r) where (,) q r = quotRem n d -}
これを、Langage Report と同じ書き方に戻したい。
068 対処により、Language Report と同じ書きかたが可能となった。
class (Enum a) => Integral a where quot, rem :: a -> a -> a div, mod :: a -> a -> a quotRem, divMod :: a -> a -> (a, a) toInteger :: a -> Integer -- Minimal complete definition: quotRem, toInteger n `quot` d = q where (q,r) = quotRem n d n `rem` d = r where (q,r) = quotRem n d n `div` d = q where (q,r) = divMod n d n `mod` d = r where (q,r) = divMod n d divMod n d = if signum r == - signum d then (q-1, r+d) else qr where qr@(q,r) = quotRem n d
↑これで Close なんじゃないの? おそらく閉め忘れということで 2020-05-14 クローズとする。