タグ

モナドに関するhiroyukimのブックマーク (5)

  • 型引数の基本から学ぶ、FreeモナドとCoyoneda - AweKuit日記

    このエントリはScalaアドベントカレンダーの3日目です。昨日は Kuchitama さんのScalaがつないでくれた縁-NetflixMeetup Kyoto 開催後記- でした。 前おき この記事は、タイトル通りFreeモナドとCoyonedaを扱うものの、あまりそれらの直接的な話やモナモナした話ではなく、そこに至るまでの実装のあれこれを『Scalaのプログラミングとして』手探りで追ってみよう、というものです。 その過程で、特に型引数(型変数)や高階型や、それらが継承時にどう扱えるかというあたりのScalaの基にたっぷり触れます。 なので、Freeモナドに興味がない方でも 型引数で A とか F[_] とか出てくると、まだちょっとこわい Scalaでいざプログラミングすると型が合わずつまづく事が多い という方にも、役に立つ部分があると思うので参考にぜひ読んでみてもらいたいです。 もち

    型引数の基本から学ぶ、FreeモナドとCoyoneda - AweKuit日記
  • モノイドと継続渡しの道具箱 - モナドとわたしとコモナド

    関数型言語Haskellにおいて、普通は計算の結果は関数の戻り値として扱うが、「結果を受け取る関数」 に渡すという継続渡しというスタイルもある。これは単なる冗長なやり方ではなく、様々な興味深い性質を持つ。 基形は、aという値を渡すところを ∀r. (a -> r) -> r のような表現にする。たとえば、与えられた数の42倍を渡したいとき、そのまま\x -> x * 42ではなく、\x f -> f (x * 42)と書く。もちろんこれだけではありがたみが分からない。 さて、与えられた文字列の中のうち、大文字のアルファベットを取り出し、それがアルファベットの何番目か計算するプログラムを作りたい。普通はリストを使ってこのように書くかもしれない。 import Data.Char uppers :: [Char] -> [Int] uppers [] = [] uppers (x:xs) |

    モノイドと継続渡しの道具箱 - モナドとわたしとコモナド
  • MonoidもMonadもモノイドだって話 - Pixel Pedals of Tomakomai

    わかめのモナド浸しと第6回 スタートHaskell2で「モナドは単なる自己関手の圏におけるモノイド対象だよ。何か問題でも?」という話をしてきた。スライドは以下。 モナモナ言うモナド入門 *1 モナモナ言うモナド入門.tar.gz .tar.gz の方はHaskellでの説明だったので、検証用コードも書いてみてgistに上げてる。QuickCheckとか使わずに値一個与えてみてるだけだけど、型が通ることくらいは確認できるかと。以下、検証用コードについて解説する。 MonoidはHaskの圏のモノイド まず、Monoidの方。図式はスライドを見てもらうとして、ソースは以下。満たすべきは各図式の時計回りと半時計回りが等しいことであり、具体的には、モノイドであれば clockwiseX == anticlockwiseX である必要があるという意味である。 assoc :: ((a, b), c)

    MonoidもMonadもモノイドだって話 - Pixel Pedals of Tomakomai
  • Haskell とモナド - あどけない話

    今日までに理解した Haskell とモナドについて、まとめてみます。間違っているところもあると思いますので、コメントを期待しています。(_ _) Haskell の特徴 純粋関数型言語です。 参照透過性 変数は初期化できますが、一旦決まった値は変更できません。関数の返す結果は、引数の値だけで決まります。 遅延評価 データの処理は、当にデータが必要になったときに実行されます。UNIX のパイプみたいなものだと考えるといいでしょう。 Haskell にも副作用はあります。 よい Lisper は、副作用のある関数とない関数を分けて実装します。しかし、そうでない Lisper が分けてくれるとは限りません。 Haskell を使うと、副作用のある部分とない部分を必然的に分けて書くことになります。 変数の値は変更できない たとえば、有名な quicksort を例にとりましょう。 quicks

    Haskell とモナド - あどけない話
  • モナドが解らない人へ、図解で絶対わかるモナドのしくみ - セカイノカタチ

    前置き みなさん、モナドって、わかりにくいですよね。 なので、図解することで解りやすく説明できるんじゃないかと、何回かモナドの図解を試みてきたのですが、むしろ複雑さが強調されてしまい残念な感じになってしまいました。 過去の図解 モナドってなんだよ!?全然わからないんで分解して図解してみた(´・ω・`) モナドの分解ふたたび ただ、以前よりモナドを表すメタファのイメージがあって、レゴブロックを組み合わせるようなカタチに例えてうまく説明できるんじゃないか。という予感がしていました。 そして、去年の年末ぐらいに、ついにそのカタチの具体的なアイディアを閃きました。 モナドを解りやすく図解する方法思い付いてるんだけど、絵心が足りなくて表現できない。モナドちゃんとかそう言うことではなく(´・ω・`) 2013-01-18 05:05:22 via ついっぷる for Android 今日、この記事を書

  • 1