タグ

monadに関するkitokitokiのブックマーク (7)

  • 合成できるモナド、モナドが合成できる時 - Milestones to EVERPEACE 〜alius via〜

    (今回のコードは github:everpeace/composing-monads にあります。) 一般に、モナドって合成できないって言われますよね。 でも、モナドって合成できる場合も有るんです。 今回はまず、合成が難しい(できない)理由を説明して、 じゃぁ「モナドが合成できる時」はいつなのか? というのと「合成できるモナドたち」をちょっとだけ紹介してみます。 それにはまず、ここから始めましょう。 モナドをflatMapじゃなくてflattenで定義してみる。 flatMapで定義されるモナドのおさらい Mというモナドは次の用に定義されます。 trait Functor[F[_]]{ def map[A,B](fa:F[A])(f:(A) => B):F[B] } trait Monad[M[_]] extends Functor[M]{ def unit[A](a:A):M[A] de

    合成できるモナド、モナドが合成できる時 - Milestones to EVERPEACE 〜alius via〜
    kitokitoki
    kitokitoki 2018/06/07
    “合成できるモナド、モナドが合成できる時”
  • Crockford On Monads And Gonads

    If you have wondered what monads are all about. Doug Crockford, author of "JavaScript The Good Parts", stars in a video explaining functional programming and monads in general. In this evening keynote from YUIConf 2012, Douglas Crockford discusses one of the most elusive of all programming concepts: Monads. To quote: In addition to it begin useful, it is also cursed and the curse of the monad is t

  • モナドとモナド変換子のイメージを描いてみた - melpon日記 - HaskellもC++もまともに扱えないへたれのページ

    最初に言っておくと、モナドって何なの?っていう答えは一切ないです。 自分にとってモナドは「とりあえず型さえ合わせておけば何かいろいろしてくれる奴」程度としか認識できていないので、そんな説明できないです。 で、そんな自分が脳内でどういう風にイメージしてモナドやモナド変換子の混ざったコードを書いているかというのを図に表してみました。 ここら辺の話を図にした感じです。 モナドを触ってみた - melpon日記 - HaskellもC++もまともに扱えないへたれのページ モナド モナドには return 関数と >>= 関数があります。 こんなイメージです。下側の線が普通の関数型の世界、上側の線がモナドの世界です。 どちらもモナド側の出力しか無いので、どちらかの関数を使ったら、モナドから脱出することはできません。 ただ、>>= 関数の右側が点線の箱になっていることが分かるでしょうか。 ここには、太

    モナドとモナド変換子のイメージを描いてみた - melpon日記 - HaskellもC++もまともに扱えないへたれのページ
  • モナドを触ってみた - melpon日記 - HaskellもC++もまともに扱えないへたれのページ

    で、こんな風に考えることにしました。 モナドは箱 モナドは単に値をくるんでるだけであると。 a をモナド化すれば m a。 でもってこうするための関数が return。単に m を付けるだけ。 モナドから値を取り出す なぜか知らないのですが、m a -> a なる関数は存在してないようです。 謎です。 ただ、do 記法というのを使えば取り出せるようです。 main = let ma = return "hoge" in do a <- ma print a return "hoge" でモナド化された ma は、do 内のみにおいてだけ a <- ma とすることで不思議な力が働いて値が取り出せます。何でこんなややこしいことするのか分かりませんが、とにかくそういうことらしいです。 モナド悲しみの連鎖 m a -> a なる関数が無いということは、一度モナド化したら、それを戻すことはできない

    モナドを触ってみた - melpon日記 - HaskellもC++もまともに扱えないへたれのページ
  • はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知

    はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28

    はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知
  • QAで学ぶMonad - あどけない話

    この記事は、Monad でつまづいた Haskeller のための Monad 再入門です。 Monadとは何ですか? Monad とは、単なる型クラスの一つです。難しいという風評もありますが、それ以上でもそれ以下でもありません。 この型クラスのメソッドは、return と >>= です。 class Monad m where (>>=) :: m a -> (a -> m b) -> m b return :: a -> m a つまり、以下を満たす型の集合が Monad です。 m a で表現できるように一つの型変数を格納するコンテナ型 >>= と return を実装 return は新しいコンテナを作り、>>= は二つのコンテナを合成します。 Monad のインスタンスは失敗系と状態系に大別できます。以下に代表的なインスタンスを示します。 失敗系: Maybe、[] (リスト)

    QAで学ぶMonad - あどけない話
    kitokitoki
    kitokitoki 2011/10/10
    MonadPlus
  • "Monads are Trees with Grafting" を訳しました

    “Monads are Trees with Grafting” を訳しました いろんなところで言いふらしてましたが、もう少しぐぐりやすいところにあった方がいいかなというのと、コンテキストをちょっと書いておいた方がいいだろうと思ったので、ここにも書いておきます。 Monads are Trees with Grafting (PDF)Monads are Trees with Grafting (Literate Haskell)“Monads are Trees with Grafting” はモナド・チュートリアルです。Monad はある法則を満たす木構造へのインターフェースだということを、図やコードで説明しています。 モナド・チュートリアル (Monad Tutorial) とは、Monad とは何なのかを説明する読み物です。モナド・チュートリアルは、日語で書かれた物も含め大量に存

    "Monads are Trees with Grafting" を訳しました
  • 1