プログラミング Haskell 第10章 型とクラスの定義 その4

今日は Monad クラスの説明を読みました。

  • Monad もただの型クラス(ただし do 記法など特別扱いされてるところも)
  • 以下の2つのメソッドを実装する
    • return :: a -> m a
    • (>>=) :: m a -> (a -> m b) -> m b

ついでに練習問題の最初のほうをやってしまいます。

  • 1.
mult :: Nat -> Nat -> Nat
mult Zero _ = Zero
mult _ Zero = Zero
mult (Succ n) m = add m (mult n m)
  • 2. これが元の実装よりも効率的な理由というのがわかりませんでした。元も二分探索しているし。
occurs :: Int -> Tree -> Bool
occurs n (Leaf m) = (compare n m) == EQ
occurs n (Node l m r) = case compare n m of
                          LT -> occurs n l
                          EQ -> True
                          GT -> occurs n r