タグ

ブックマーク / qiita.com/hiratara (2)

  • モナドモナド (LT没ネタ) - Qiita

    数学カフェのLTで話す予定でしたが、使う機会がなくなったので公開します。 Haskellにおけるモナドとは HaskellではMonadという型クラスでモナドを表現しています。この型クラスは return :: a -> m a 、 join :: m (m a) -> m a 、そして fmap においてモナドが表現されています。色んな人が色んな場で説明していることですから、今さらここで議論を掘り返す必要はないでしょう。 モナドには []、Maybe、State s、Cont r、Reader r、Writer w、IO、などがあります。しかし、みなさんはそれで満足でしょうか? そんなモナドで大丈夫ですか? Haskellでもっとモナド モナドをさらにこじらせた人は、 Free モナドや Codensity モナドなどに手を出すでしょう。これらは大変便利なものですが、その珍しさ故これまた

    モナドモナド (LT没ネタ) - Qiita
    terazzo
    terazzo 2016/09/25
    実用性はともかくモナドモナド則を満たすContTの実装ってありうるのかしらん
  • MonadTrans型クラス - Qiita

    lift . return = return lift (m >>= f) = lift m >>= (lift . f) 今まではなんとなくモナドの分配則で語るべき話かと思ってたんだけど、微妙に違うっぽい。具体的には、liftはモナド間の射(monad morphism)として定義されている。確かに、求められる法則を見るとreturnと(>>=)の構造を保持するような規則と読み取れる。 ところで、モナドは関手なので、その間の射であれば自然変換であるべきだ。liftも計算してみるときちんと自然変換になっている。f :: a -> bについて可換性を見てみる。 (lift . (fmap f)) mx = lift(fmap f mx) = lift(mx >>= (return . f)) -- fmapの定義 = lift mx >>= (lift . return . f) -- 法則

    MonadTrans型クラス - Qiita
  • 1