13
class Monad m where
  return :: a -> m a
  (>>=)  :: m a -> (a -> m b) -> m b
  (>>)   :: m a -> m b -> m b
  m >> n = m >>= \_ -> n

  fail   :: String -> m a

型クラスで方程式(または関数宣言?)を見たことがありません。型クラスに方程式があるのはなぜですか?

私は_が何かに一致するための用語であることを知っています。しかし、どのm >> = \ _-> nが一致しますか?

4

1 に答える 1

17

これは、メソッドのデフォルトの実装です。インスタンス宣言にの明示的な実装が含まれていない限り、(>>)それが使用される定義です。一部のメソッドを別のメソッドを使用して実装できる場合、デフォルトのメソッドが広く使用されていますが、一部のデータ型ではより効率的な実装が行われる可能性があります。

m >>= \_ -> n

の「結果」mは、引数を無視してn関係なく返す関数に供給されることを意味します。それはまた書くことができます

m >>= const n

効果のあるモナドのコンテキストでは、「m効果を持たせるために実行しますが、戻り値を無視してから実行しますn」。それ(>>)がそこで行うことを意味します。

于 2011-12-31T19:49:51.577 に答える