タグ

monadに関するrydotのブックマーク (54)

  • Common Lispでモナドする話 考察編 - IT系で覚醒めたい

    前回に引き続きCommon Lispでモナドの話。今回はそれをマトモにしていこうというテーマ。ちゃんと作れば普通に使えるものができそうな気がしたので。 まずはそもそも前回のモナドがなぜ動くのかから解説してみる。 今までモナドを動的型言語で実装する際にはreturnを如何に実装するかという問題があった。 returnは通常のオーバーロードと違って戻り値が多相になっているため、静的な型情報がないとメソッドを解決できない。 class Monad m where (>>=) :: m a -> (a -> m b) -> m b return :: a -> m a この多相こそがモナドの力を支えている。 ちなみにこの(>>=)とreturnはHaskellの外ではbind/unitと呼ばれることがある。(学術的なコンテクストで使われることが多い?[要出典]) さて、前回のmonadではどうして

  • Monads - where are they necessary?

  • Clojureでモナド内包表記とStateモナド

    cljsbuildのcrossoversという機能を知らない所為で今まで無駄に苦労してきましたが、これでマクロが使えないという制約から解き放たれました。 万歳!cljsbuild! マクロが使えるようになってまず一番最初にやることは何か? もちろん、モナド内包表記の実現ですね! HaskellのdoよりはScalaのforの方が慣れているのでこちらを採用しました。 動的型付けの言語でのモナドの実現はいくつか見てきましたが、明示的にコンテキストを指定するタイプはあまり好かないので、ClojureらしくProtocolで表現することにしました。 Monadic Protocol 通常モナドはunitとbindが実装され、モナド則 bind f (unit x) == f x bind unit m == m あともう一個なんかあった気がする を満たしますが、動的型付けの言語でunitを実現する

  • Haskell/Understanding monads - Wikibooks, open books for an open world

    There is a certain mystique about monads, and even about the word "monad" itself. While one of our goals of this set of chapters is removing the shroud of mystery that is often wrapped around them, it is not difficult to understand how it comes about. Monads are very useful in Haskell, but the concept is often difficult to grasp at first. Since monads have so many applications, people often explai

  • Common Lispでモナドする話 - IT系で覚醒めたい

    昨日こんなものがTLに流れてきた Clojureでモナド内包表記とStateモナド - http://basking-cat.blogspot.jp/2012/10/clojurestate.html なかなかおもしろいのでCLでも実装。 コアの部分はこれだけ。あとは型クラスよろしくモナドごとにメソッドを定義していく。 使い方はこんな感じ (perform ((a (list 1)) (b (list 2 3)) (c (list 3 4 5))) (+ a b c)) ; => (6 7 8 7 8 9) すばらしい。また別の例 (defun double-list (x) (list x x)) (perform ((a '(1 2 3)) (b (double-list a)) (c (double-list b))) c) ; => (1 1 1 1 2 2 2 2 3 3 3

  • Conal Elliott » Functional interactive behavior

    rydot
    rydot 2013/05/17
  • http://www.cs.ru.nl/B.Jacobs/TALKS/types06.pdf

    rydot
    rydot 2013/05/17
  • Indexed Monadの世界 - モナドとわたしとコモナド

    もっと、モナドの力を引き出したくはないか? え?アクションの前後で型を変えたい?いやいやいや、モナドは自己関手の圏上の単なるモノイドだよ、そんなことができ…る…!?えっ、できるの…マジで…? できる。そう、Haskellならね。 {-# LANGUAGE QuasiQuotes #-} import Control.Monad.Indexed.State import Control.Monad.Indexed import Language.Haskell.IndexedDo hoge :: IxState Int [Int] () hoge = [ido|do imodify (*10) imodify show imodify reverse imodify (++"123") imodify $ map fromEnum |] *ghci> runIxState hoge 42 (

    Indexed Monadの世界 - モナドとわたしとコモナド
  • モナドトランスフォーマー・ステップ・バイ・ステップ(Monad Transformers Step By Step) - りんごがでている

    著者のMartin Grabmüller氏に許可をいただきましたので、 Haskellモナドトランスフォーマーのチュートリアルを翻訳したものを公開します。 タイポや誤訳、プログラムのミス等ありましたら、 Twitter宛@bicycle1885かコメント欄までご連絡頂けるとありがたいです。 元のテキストやプログラムは以下のリンクから得られます。 Monad Transformers Step by Step [2012/12/19] 誤りを多数訂正しました。id:qtamakiさん、ありがとうございます。 [2014/6/19] 誤りを2点訂正しました。id:daimatzさん、id:hitotakuchanさん、ありがとうございます。 Monad Transformers Step by Step Martin Grabmüller Oct 16 2006 概要(Abstract) この

    モナドトランスフォーマー・ステップ・バイ・ステップ(Monad Transformers Step By Step) - りんごがでている
  • モナドトランスフォーマーとmonad-control - maoeのブログ

    アドベントカレンダーのいいネタが無いなあと思っていたところ、ちょうど週末にあたらしいmonad-controlがリリースされたので、これを紹介したいなと思いました。 その前に、モナドトランスフォーマーというかっこいい名前の代物の話をちょっとだけしましょう。 モナドトランスフォーマーと例外処理 Haskellerの皆さんはきっと息をするかのように自然にモナドを使っていることと思います。標準で提供されているモナドは単機能なので、組み合わせたくなってきます。必然的に皆モナドトランスフォーマーに手を伸ばすわけです。実際のアプリケーションのコードを書くと、多くのモナドではベースモナドがIOになるでしょうから、今度は自作したカスタムモナドスタックでIOが投げる例外をハンドルしたくなるわけです。 ここでふとControl.Exception.catchの型をみると Prelude> :t Control

    モナドトランスフォーマーとmonad-control - maoeのブログ
  • Haskell/Monad transformers - Wikibooks, open books for an open world

    We have seen how monads can help handling IO actions, Maybe, lists, and state. With monads providing a common way to use such useful general-purpose tools, a natural thing we might want to do is using the capabilities of several monads at once. For instance, a function could use both I/O and Maybe exception handling. While a type like IO (Maybe a) would work just fine, it would force us to do patt

  • Freeモナド in Scala - ( ꒪⌓꒪) ゆるよろ日記

    噂のFreeモナドをScalaで写経してみた。 Freeモナドは、取り込む型SのFunctorと組み合わせて、Functorの特性に応じたモナドを得ることができるものらしい。 そろそろFreeモナドに関して一言いっとくか - fumievalの日記 Freeモナドって何なのさっ!? - capriccioso String Creating(Object something){ return My.Expression(something); } Haskell for all: Why free monads matter stackless scala with free monad 独習 Scalaz: 18日目 | eed3si9n ( ゚д゚) 「ナンデ!?モナドナンデ!?」 モナドがセブンセンシズならFreeモナドはエイトセンシズくらいなのでかなり小宇宙を高めないと理解が追いつ

    Freeモナド in Scala - ( ꒪⌓꒪) ゆるよろ日記
  • Freeモナドって何なのさっ!? - capriccioso String Creating(Object something){ return My.Expression(something); }

    最近Haskellerの間でFreeモナドが熱いです。 Haskellで悟りを開いた人がFreeモナドで再び悟りを開いたりして、なんかよく解らないけど凄いことになっている今日このごろですが、すっかり乗り遅れていました。どうも、貴女のちゅーんです。 で、皆こぞって「すごいすごい」と言っているFreeモナドなので、流石にいつもまでも全然知らないのはマズイんじゃないかなぁとか思って、重い腰を持ち上げ調べながらこの記事を書き始めたワケですよ。はい。*1 けっこう急ぎで勉強して書き上げたので随所に間違いあるかもです。ツッコミお待ちしてます。 さて、この「Freeモナド」について、オレオレ定義で簡単に言葉にすると。「Functorと組み合わせて様々な挙動を実現できるモナド」です。 大抵「Monadのインスタンス」というと、MaybeにしてもIOにしても、わりと具体的な事象を扱ってますが、このFreeモ

    Freeモナドって何なのさっ!? - capriccioso String Creating(Object something){ return My.Expression(something); }
  • そろそろFreeモナドに関して一言いっとくか - モナドとわたしとコモナド

    Freeモナドはすごい。 Haskellを書いていて、「特殊化された処理を記述するモナドが簡単に作れたら便利だろうなー」と思ったことはないだろうか?簡単に作れるのである、そう、Haskellならね。 これが、純粋なFreeモナドの定義である。 data Free f a = Pure a | Free (f (Free f a)) instance Functor f => Monad (Free f) where return = Pure Pure a >>= k = k a Free fm >>= k = Free (fmap (>>=k) fm) (Functor、Applicativeのインスタンス宣言は自明なので省略) 与えられたFunctorをお互いに埋め込み合っている、という漠然とした印象で、何が嬉しいのかよくわからないかもしれない。だが、この単純さこそFreeモナドの便利

    そろそろFreeモナドに関して一言いっとくか - モナドとわたしとコモナド
  • Haskell/圏論 - Wikibooks

    この項目では Haskell に関連する内容に限って圏論の概観を与えることを試みる。そのために、数学的な定義に併せて Haskell コードも示す。絶対的な厳密さは求めない。そのかわり、圏論の概念とはどんなものか、どのように Haskell に関連するかの直感的な理解を読者に与えることを追求する。 3つの対象A, B, C、3つの恒等射, , と、さらに別の射, からなる単純な圏。3つめの要素(どのように射を合成するかの定義)は示していない。 質的に、圏とは単純な集まりである。これは次の3つの要素からなる。 対象(Object)の集まり。 ふたつの対象(source objectとtarget object)をひとつに結びつける射の集まり。(これらはarrowと呼ばれることもあるが、Haskellではこれは別の意味を持つ用語なので、ここではこの用語を避けることにする。) f がソースオブ

  • モナドも、コモナドも、あるんだよ(後篇) - haxis_fxの日記

    前篇のつづき、コモナドを話す前にまずDualityについて復習しよう: 圏論にて、ある物の双対(Dual)を次のように定義する: この定義はつまり確定的に明らかであること:矢印をひっくり返すだけ簡単な仕事です。 ある構造xxxに対して、中の要素をすべてdualをかけ、得た新し構造を圏論の言葉で言うとco-xxxである。 例: ニート <=> コ会社員 全裸待機 <=> コ正装出撃 非リア <=> コリア充 など ???「これから毎日「コ」を付けろうぜ?」 (◕‿‿◕)「…わけがわからないよ」 まぁということで、モナドの定義をすべて対を取ればコモナドになるわけだ。 co-Kleisli category、は下記要素で構成される: のobject のmorphism と は: 下記法則を従う: コモナド(comonad)とはtriple()のこと。 GHCのコモナドはhackageDBから配布

    モナドも、コモナドも、あるんだよ(後篇) - haxis_fxの日記
  • モナドも、コモナドも、あるんだよ(前篇) - haxis_fxの日記

    さて、今回はみんな大好きなモナドだよ、まあ俺もそうだけど。 まず圏論のmonadから見てみよう: はendofunctor*1。今私たちの手元にmorphisms がある。問題は:どんな状況の下で、の意味を変更する事により、が別の圏にのような形式になるのか? まず、何らかの方法で二つのmorphisms とをのような形式に「結合」しなければならない。そして、この「結合」は圏のcompositionの定義を満足しなければならない。最後、を圏のidとして存在しなければならない。 この新しい圏はKleisli categoryと言い、と表記される。の構成は下記通り: のobject 元の圏のobject のmorphism 元の圏のmorphism *2 とはnatural transformation: あと、compositionの結合則とidの定義を満足するために、とが下記の法則を従わなけ

    モナドも、コモナドも、あるんだよ(前篇) - haxis_fxの日記
  • Homepage van Henk Robbers

    @l `�U

    Homepage van Henk Robbers
  • 絵で見るモナド · eed3si9n

    2012-08-21 John Wiegley さんの “Monads in Pictures” を翻訳しました。翻訳の公開は人より許諾済みです。翻訳の間違い等があれば遠慮なくご指摘ください。 2012年8月20日 John Wiegley 著 2012年8月21日 e.e d3si9n 訳 これはモナドのチュートリアルではないし、ここには数学用語も出てこない。稿は、既にモナドを一応使えるぐらいには習った人を対象とする。視覚化することで、何のために何をやっているかが明らかになるはずだ。 関数 モナドに対する直感を得る一つの方法として関数からモナドへの抽象化をたどるというものがある。関数が何をやっているのかを簡単な絵で表してみよう。Haskell の関数の呼び出しの構文を上に、同じ演算を視覚化したものを下に置いた: 関数はある値 a を投射 (map) して別の値 b を得る。中で何が起

  • Why free monads matter

    Interpreters Good programmers decompose data from the interpreter that processes that data. Compilers exemplify this approach, where they will typically represent the source code as an abstract syntax tree, and then pass that tree to one of many possible interpreters. We benefit from decoupling the interpreter and the syntax tree, because then we can interpret the syntax tree in multiple ways. For