タグ

Monadに関するsiroccoのブックマーク (34)

  • HaskellのMonadは何をしているか - Just $ A sandbox

    はじめに:モナドが何かわからないけど分かりたい人へ この記事はあなたの為に書かれたものです! 「モナドって難しいそうだしよく分からない、けどきっと賢い人たちが『モナドとは何か』について素敵な説明を与えてくれるはず!」 …そういう期待を持っているまさにあなたのその勘違いを是正するためにこの記事はあります。 「モナドが何か」を理解するのはまずは諦めて下さい。 この記事は、世界一わかりやすいモナドの記事 - みょんさんの。を理解したいと思わない人のために、プログラミングの文脈でモナドに関する少しの考え方を提供するものだと考えて下さい*1。 what it is から how it works へ モナドはモノではありません。だから「何」という質問に答えるのは難しいでしょう。数学的な公理を読者に投げつけることも意味不明な喩えでごまかすこともしたくはないので、少しだけ違う説明をします。 例を挙げまし

    sirocco
    sirocco 2014/03/22
    "Functorは、「どうやって函数を適用するか」を与えるような型クラス"、"Monadは、「どうやって計算に変換・計算を連結するかを与えるような型クラス」"
  • モナドとわたしとコモナド

    マイクロサービスアーキテクチャにおいて、ある構造化されたデータを、構造を維持したまま別のコンポーネントでも使いたくなる誘惑が存在する。 例えば、ドメインロジックを扱うコンポーネントに「ユーザーの種別(ゲスト、メンバー、管理者)」という概念があり、API トークンの認可情報に含めたいとして、APIトークンを管理するコンポーネントはその概念に関与すべきだろうか。 // 関与しない定義 IssueToken(userType: string, expiresAt: Date): Token // 関与する定義 enum UserType { Guest, Member, Admin, } IssueToken(userType: UserType, expiresAt: Date): Token ここで安易にそうしてしまうと、「ユーザーの種別」の定義が変わったとき——例えば新たに「モデレーター」

    モナドとわたしとコモナド
    sirocco
    sirocco 2013/06/30
    実は、モナドを表現し、かつモナドで表現される言葉は存在する。その一つは手続きである。手続き型言語の「手続き」だ。「Aを実行し、その結果を手続きを返す関数に渡す。そして、返ってきた手続きBを実行する」
  • モナドの分解ふたたび - セカイノカタチ

    懲りずにモナドを分解していきます。 以前にモナドを図解してみたんだけど、同じノリで今度は普通にソースコードベースで分解していきたい。 前回の教は「プログラミングHaskell」だったけど、今回は「すごいHaskell楽しく学ぼう!」から。 早速、P335を見てみよう。 newtype State s a = State { runState :: s -> (a, s) } instance Monad (State s) where return x = State $ \s -> (x, s) (State h) >>= f = State $ \s -> let (a, newState) = h s (State g) = f a in g newState さて、そろそろモナドの定義もなれてきたぞ。 返り値であるところの、「s -> (x, s)」が関数になっていて、引数を受け

    モナドの分解ふたたび - セカイノカタチ
  • モナドってなんだよ!?全然わからないんで分解して図解してみた(´・ω・`) - セカイノカタチ

    勉強会に行ったり、ブログやを読んだりいろいろしたけど、モナドってなんなんすかね。(´・ω・`) 状態だった僕ですが、分解して、図解してみたら少しわかった気がするので、エントリーしてみる。 「プログラミングHaskell」のP106によると、IOモナドとは、以下の形をしているらしい*1。 type IO a = World -> (a, World) そして、次のページにバインド(>>=)の実装が以下のように書かれている。 (>>=) :: IO a -> (a -> IO b) -> IO b f >>= g = \ world -> case f world of (v, world') -> g v world' はい。一気にギアが上がりましたね。(´・ω・`) 全然分かんない。(´・ω・`) ということで、これを分解して図解するのがこのエントリーの趣旨です。 IO a について ま

    モナドってなんだよ!?全然わからないんで分解して図解してみた(´・ω・`) - セカイノカタチ
    sirocco
    sirocco 2013/06/25
    IOモナドで電源コンセントを通じて純粋な世界と外界とやりとりをする仕組みの説明。
  • 圏論とかモナドなんて簡単だからscalaを使って説明してみた - だらだらしてたいなぁ

    はじめに 関数型といえばモナド、モナドといえば難しいという事が巷で言われていますが、いきなりモナドを理解しようとするから難しく思えるだけで、圏論から順序を追って理解していけば全然難しく無いんだよって事を分かって貰えればいいなぁと思い書いて見ることにしました。 ただ、圏論といっても適用範囲がとっても広く、応用編になると分けわかんなくなってくるので、ここではプログラミング分野に特化したFP(functional programing)圏論*1について書きます。 また、説明を簡単にする為に細かい部分をいろいろ省略しています。学術的な定義としては正確ではないので、このエントリの説明は大体合ってる位の気持ちで読んでくださいね。 尚、ぼくは圏論の詳しい事はさっぱり分からないので、学問的な話を振られても回答できませんキリッ 圏ってなんなの? 圏論と言えば、圏です。 圏って何なのかというと、対象(obje

    圏論とかモナドなんて簡単だからscalaを使って説明してみた - だらだらしてたいなぁ
    sirocco
    sirocco 2013/04/20
    この説明面白そう。
  • Functors, Applicatives, And Monads In Pictures - adit.io

    Written April 17, 2013 updated: May 20, 2013 Here's a simple value: And we know how to apply a function to this value: Simple enough. Lets extend this by saying that any value can be in a context. For now you can think of a context as a box that you can put a value in: Now when you apply a function to this value, you'll get different results depending on the context. This is the idea that Functors

    sirocco
    sirocco 2013/04/20
    図解モナド。2に(+3)の関数を適用すると5になる。Maybe FunctorならJust型の箱とNothingという空っぽの箱がある。それに(+3)を適用する仕組みは・・・って可愛い絵。で、モナドはトイレが詰まったときに使うペッコンペッコンだ
  • モナドがいっぱい!

    YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情Junichi Ishida

    モナドがいっぱい!
    sirocco
    sirocco 2012/11/19
    "モナドがいっぱい! 第6回スタートHaskell発表資料"
  • guard の動作原理を考える - あどけない話

    「リストモナドの動作原理を考える」の続きで、guard の動作原理を考えてみます。 guard は、リスト内包表記では、こんな感じに書けます。 [x | x <- [1,2], x < 2] → [1] これを do で書き直すと、こうなります。 do x <- [1,2] guard (x < 2) return x guard の定義は、Contorol.Monad の中にあって、こういう風になっています。 guard :: (MonadPlus m) => Bool -> m () guard True = return () guard False = mzero 僕には return () が何を意味するのか、さっぱり分かりませんでした。 do から >>= へ変形 上記の do を >>= へ変形するとこうなります。 [1,2] >>= (\x -> guard (x < 2)

    guard の動作原理を考える - あどけない話
  • 型クラスとモナドと Free モナド - あどけない話

    要約:Free モナドは何が嬉しいのかを議論するためのたたき台。以下の2つの論文に載っている例を3つの方法で実装する。 Janis Voigtlander, "Asymptotic Improvement of Computations over Free Monads" Wouter Swierstra and Thorsten Altenkirch, "Beauty in the Beast -- A Functional Semantics for the Awkward Squad" モナド 最近、僕はモナドを次のように説明するようにしている。「モナドとは言語内DSLを実装するための API (あるいはフレームワーク)」 だから、何か言語内DSLを作るなら、それをモナドのインスタンスにすべきだ。ここでは、getChar と putChar という API を持つ簡単な DSL を考

    型クラスとモナドと Free モナド - あどけない話
    sirocco
    sirocco 2012/11/17
    まだReal World Haskell 読み終えていない・・・Orz
  • そろそろ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のモナド変換子を理解したら読めばいいと思います、というか読むべき。超わかりやすかった。合体ロボ並に合成されて強そうな型に変換していく様は圧巻のゴーカイジャー(見てないからしらんけど) Monad Transformers Step by Step スマイルプリキュアで例えると、「プリキュア・レインボーヒーリング」ですね(多分)。

    モナド変換子を重ねまくれ
  • Do notation considered harmful - HaskellWiki

    Criticism Haskell's do notation is popular and ubiquitous. However we shall not ignore that there are several problems. Here we like to shed some light on aspects you may not have thought about, so far. Didactics The do notation hides functional details. This is wanted in order to simplify writing imperative style code fragments. The downsides are that: Since do notation is used almost everywhere

    sirocco
    sirocco 2012/11/08
    Maybe Monad もdo記法を使えるんだ! do{a<-(Just 1);b<-Just 2 ;return (a + b)} --> Just 3
  • http://tanakh.jp/pub/fp-tudoi-2012/tudoi.html

    sirocco
    sirocco 2012/09/07
    「すごいHaskellたのしく学ぼう!」("Learn You a Haskell for Great Good!") の紹介。超特急のモナド紹介でもあるけれど本を読んで理解してからでないとたぶん意味不明。
  • 「JavaScriptでの非同期関数合成」を継続モナドで - terazzoの日記

    お題: 複数個の関数があって、関数を呼び出した結果を使って関数を呼び出して…っていうのを1個の関数にします。 JavaScriptでの非同期関数合成 - monjudoh’s diary 関数の形を見てみます。 // 1を足す function add1(callback,arg){ callback(arg+1); } コールバック関数を渡して、戻り値ではなくコールバック関数を呼び出してもらう事で結果を取得する……これって「CPS(継続渡し形式)」!CPSなら分かるわ!(当か?) 参考にしたサイト: http://www.h4.dion.ne.jp/~unkai/js/js12.html http://practical-scheme.net/docs/cont-j.html JSDeferredで考えるモナド - JavaScriptで遊ぶよ - g:javascript Haske

    「JavaScriptでの非同期関数合成」を継続モナドで - terazzoの日記
  • Haskellの継続モナド(Continuation Monad)を理解するポイント - よくわかりません

    モナドのすべての継続モナドのところが簡潔で、概念とかもあまり明示的に説明してなくて理解に苦労したので、ポイントをメモ。誤りなど、乞うご指摘。 newtype Cont r a = Cont { runCont :: ((a -> r) -> r) } instance Monad (Cont r) where return a = Cont $ \k -> k a (Cont c) >>= f = Cont $ \k -> c (\a -> runCont (f a) k) 概要的なこと 継続といいつつ、Contが表すのは継続というより、CPSな関数。*1 CPSな関数は、引数に関数をとり、自分の仕事の最後でその関数(継続)を呼ぶ。 CPSな関数に、継続として別のCPSな関数を渡す、その別のCPSな関数に継続としてさらに別のCPSな関数を渡す、…の連鎖(CPSな関数のネスト)が、全体として

    Haskellの継続モナド(Continuation Monad)を理解するポイント - よくわかりません
  • はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知

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

    はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知
  • モナドはメタファーではない · eed3si9n

    2011-05-28 Scala界の関数型プログラミング一派を代表する論客の一人、@djspiewak が 2010年に書いた “Monads Are Not Metaphors” を翻訳しました。翻訳の公開は人より許諾済みです。翻訳の間違い等があれば遠慮なくご指摘ください。 2010年12月27日 Daniel Spiewak 著 2011年5月29日 e.e d3si9n 訳 僕は今、約束を破るところだ。およそ三年前、僕は絶対にモナドの記事だけは書かないと自分に約束した。既にモナドに関する記事は有り余っている。記事の数が多すぎてその多さだけで多くの人は混乱している。しかも全員がモナドに対して異なる扱い方をしているため、モナドの概念を初めて学ぼうとする者は、ブリトー、宇宙服、象、砂漠のベドウィン (訳注: アラブ系遊牧民) の共通項を探す努力をするハメになっている。 僕は、この混乱した

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

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

    モナドとモナド変換子のイメージを描いてみた - melpon日記 - HaskellもC++もまともに扱えないへたれのページ
    sirocco
    sirocco 2011/10/31
    面白い。return は一般の世界からモナドの世界へ変換。(>>=)はモナドから一般の世界へ降りてきて演算をしてからモナドの世界へ。liftM は関数を引数にしていてモナドから一般へ降りて関数適用してモナドの世界へ
  • モナドの入り口に立つ - capriccioso String Creating(Object something){ return My.Expression(something); }

    Haskellを格的に勉強しはじめて20日と少し経ち、関数型言語のイメージのようなものは大体つかめて来たと思うので、Haskellerの間で「難関」と言われている「モナド」に挑戦します。 IOや、List、Maybeがモナドだ、というのはいやというほど聞かされていたのですが、仕組みの分らないものを使うのは気が引ける性格なので、思い切って実際にモナドのインスタンスを作って動かしてみる事にしました。 module Signal where data Sig = Red | Yerrow | Blue instance Show Sig where show Red = "Red" show Yerrow = "Yerrow" show Blue = "Blue" data Signal a = Signal a instance Monad Signal where (>>=) (Signa

    モナドの入り口に立つ - capriccioso String Creating(Object something){ return My.Expression(something); }
    sirocco
    sirocco 2011/10/27
    こうやって作ればいいんだ。
  • 快刀乱麻を断つモナド - F#とIOモナドとコンピューテーション式の奥義と - Bug Catharsis

    ,. -‐'''''""¨¨¨ヽ (.___,,,... -ァァフ|          あ…ありのまま 今 起こった事を話すぜ! |i i|    }! }} //| |l、{   j} /,,ィ//|       『F#でIOモナドっぽい何かを作ろうとしていたら、 i|:!ヾ、_ノ/ u {:}//ヘ        いつのまにか、全然別モノのLazyモナドをつくっていた。』 |リ u' }  ,ノ _,!V,ハ | /´fト、_{ル{,ィ'eラ , タ人        な… 何を言ってるのか わからねーと思うが /'   ヾ|宀| {´,)⌒`/ |<ヽトiゝ        おれも 何をされたのか わからなかった… ,゙  / )ヽ iLレ  u' | | ヾlトハ〉 |/_/  ハ !ニ⊇ '/:}  V:::::ヽ        頭がどうにかなりそうだった… // 二二二7'T''