タグ

モナドに関するigrepのブックマーク (34)

  • Pythonでもジェネレーターで関数モナドとStateモナドを模倣してみた - Qiita

    ジェネレーターを DSL のように使って関数モナドと State モナドを模倣してみました。記述をそれっぽく見せることに重点を置いたため、bind や return を正確に実装したわけではありません。 この記事は次の記事の Python 版です。同じことが出来るはずなので確認したくなりました。 ジェネレーターで関数モナドとStateモナドを模倣してみた 結果的に、ジェネレーターの return の仕様の変遷や、デコレーターが有用なことなどが分かりました。 実装 実装を並べると、関数モナドと State モナドの差分が分かりやすいです。 関数モナド State モナド

    Pythonでもジェネレーターで関数モナドとStateモナドを模倣してみた - Qiita
  • JavaScript + generator で Maybe、 Either、 Promise、 継続モナドと do 構文を実装し async-await と比べてみる - Qiita

    function _do(M, genfn){ const gen = genfn(); return recur(gen, null); function recur(gen, prev){ const {value, done} = gen.next(prev); const ma = value instanceof M ? value : M.pure(value); return ma.bind((a)=> !done ? recur(gen, a) : M.pure(a) ); } } JS の do は予約語なので _do にしてます do 構文は、モナディックな型の値 m1, m2, m3 を逐次返す generator を引数にとる そして ma.bind((a)=> mb.bind((b)=> mc.bind((c)=> Monad.pure(c) ))) のように計算

    JavaScript + generator で Maybe、 Either、 Promise、 継続モナドと do 構文を実装し async-await と比べてみる - Qiita
  • GHC IO モナドの中身

    Haskell の IO モナドって,中身どうなってたんだろと気になってて,ちょっと調べてみた.そのメモ. IO モナドと RealWorld まずは基から. IO モナドは, Haskell の根幹となるモナドで, main も IO で書く. GHC では中身は次のように定義されている [1]: -- In GHC.Types module of ghc-prim package newtype IO a = IO (State# RealWorld -> (# State# RealWorld, a #)) 見ての通り, IO a は State# RealWorld -> (# State# RealWorld, a #) の newtype だ.あんまり見慣れない State# RealWorld という型と (# , #) という型が出てきたけど, State# RealWo

    GHC IO モナドの中身
    igrep
    igrep 2019/05/18
    "このように, ST も IO と同じように特別なことはしておらず,既存の汎用的な仕組みを利用して,うまく実装されている"
  • Maybe と IO を一緒に使いたくなったら - ryota-ka's blog

    この記事は以下のページに移転しました. blog.ryota-ka.me たまには初学者向けにライトな話題を. 対象読者 すごいHを12章か13章ぐらいまでは読んだ do 構文を使って IO などの処理が書ける Haskell のプログラムはなんとなく書けるが,あまり綺麗に書けている気がしない IO の中で Maybe を使う 例として,以下のようなプログラムを考えてみよう. 2つの整数 a b を標準入力から1行ずつ順に読み込む a と b の和を標準出力に出力する 与えられた入力が整数でなかった場合には,その時点でエラーメッセージを出力し,プログラムを終了する これらの要件を満たすプログラムを素朴に実装するならば,以下のようになるだろう. import System.Exit (die) import Text.Read (readMaybe) readInt :: String -

    Maybe と IO を一緒に使いたくなったら - ryota-ka's blog
  • Selectionモナド入門 - Qiita

    Selectionモナドは2010年にEscardóとOlivaによって"Selection Functions, Bar Recursion, and Backward Induction"で紹介されました。継続モナドによく似ていますが少し違っており、ゲーム理論の解法の一つである後ろ向き帰納法や探索アルゴリズムなど色んなパターンを取り扱うことができます。transformersというよく知られたライブラリではControl.Monad.Trans.Selectというモジュールとして実装が提供されています。 Selectionモナドの型を見てみましょう。

    Selectionモナド入門 - Qiita
    igrep
    igrep 2019/04/05
    ずいぶん前にtransformersに追加された http://hackage.haskell.org/package/transformers-0.5.6.2/docs/Control-Monad-Trans-Select.html のことか。前から気になってた!
  • モナドの新しい力!スーパープリキュアモナド! - Haskell-jp

    Link to hereこの記事は この記事はHaskell Advent Calendar その2兼プリキュアAdvent Calendar 20185日目の記事です。 毎度同時投稿で失礼します。 今年は私用で忙しかったので、のんびり書いてできあがったら空いてる日に投稿する、という楽なスタイルで書かせていただきました。なのでタイムスリップして5日目の記事と言うことにします(それにしてもずいぶん時間かかってしまってすみません、もうクリスマスも過ぎたし…😥)。 今回も例年の私のAdvent Calendarどおり、タイプセーフプリキュア!に、最近追加しようとした機能と、その際使用したもろもろの要素技術についての記事です。 タイプセーフプリキュア!そのものについては今年9月の記事や、そこで言及しているもっと古い記事をご覧ください。 Link to here課題: プリキュアに変身していない状

    モナドの新しい力!スーパープリキュアモナド! - Haskell-jp
  • [Haskell] 爆速でモナドを理解する

    何番煎じか分かりませんが、爆速でモナドを説明します。比喩は使いません。 モナドのコンセプトはこの記事の半分ほどで説明し終わるので、残りはオマケです。 *Maybe, State, List, IO など、具体的なモナドの使い方は一切説明していません。 この記事で説明しているのは「モナドとは何か」だけです。 モナドを使いこなせるようになるためには、他の記事をあたって様々なモナドの使い方をひとつずつ覚えていくほかありません。 関数の結合 モナドの説明に入る前に、まず関数結合の演算子を定義しましょう GHCi> import Data.Function(flip) GHCi> let (>.>) = flip (.) GHCi> :t (>.>) = flip (.) (>.>) :: (a -> b) -> (b -> c) -> (a -> c) GHCi> let showSqrt = s

    [Haskell] 爆速でモナドを理解する
    igrep
    igrep 2018/10/17
    Kleisli圏における射の合成 (>=>)を使った説明をよく目にするようになった気がするなー。
  • モナド則とプログラミング - Qiita

    1. (return x) >>= f ≡ f x 2. m >>= return ≡ m 3. (m >>= f) >>= g ≡ m >>= (\x -> f x >>= g) 等号(≡)は置き換え可能であるという意味で読んでください。上から左単位元、右単位元、結合則と呼ばれます。 モナド則が満たされたモナドはプログラマにとって何が嬉しいのでしょうか。 端的に言ったらコードを分割/組み合わせ/抽象化等が出来るため、嬉しいのです。 もう少し言えば、モナド上では自然にプログラミング出来るから嬉しいのです。 もう少し言えば、モナド上でいつも通りエンジニアリング出来るから嬉しいのです。 モナド則のプログラミング上の意義とは、理解してしまうと当に当たり前になってしまいます。 三日後には嬉しさのことなど忘れてその当たり前のメリットを享受することでしょう。 そうして誰もHaskellのモナド則につ

    モナド則とプログラミング - Qiita
    igrep
    igrep 2018/07/06
    宣伝申し訳ないけど「モナド則が実際のプログラミングでどの様に関わっているのか」という意味では http://the.igreque.info/posts/2016/04-monad-in-java.html でもそこそこ詳しく触れていると思うので、読んで欲しいな!
  • The Comonad.Reader » The State Comonad

    Is State a Comonad? Not Costate or rather, Store as we tend to call it today, but actually State s itself? Let's see! Recently there was a post to reddit in which the author King_of_the_Homeless suggested that he might have a Monad for Store. Moreover, it is one that is compatible with the existing Applicative and ComonadApply instances. My knee-jerk reaction was to disbelieve the result, but I'm

  • モナドを理解する - 迷える者への手引き

    いずれにせよ、システムの状態が時間の関数であり、そのため時間は考慮しなければならない余分な要素となります。"xの値は何?"と問い合わせることは実際できません。代わりに、"時間tにおけるxの値は何?"と問い合わせなければなりません。これではコードを判断するのが難しくなり、複雑な要素が増えます。結論としては... 状態あり: ダメ! 状態なし: グッド! 式とアクション 式とは値を持った文です。たとえば以下のコードを考えてみましょう。 x = 5 y = x + 7 x = y + 1 最初のxは値が5であるという式です。最後のxは値が13であるという式です。コードは他の式も含んでいます。たとえば真ん中の行は、x + 7が12という値であるという式です。 ほとんどのコンピュータ言語では、キーボードから読み込むコマンドは式であり、その式は値を持っています。次の文を考えてみましょう。 x = ne

    モナドを理解する - 迷える者への手引き
  • GitHub - TeXitoi/rust-mdo: Monadic do notation for rust using macro and duck typing

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    GitHub - TeXitoi/rust-mdo: Monadic do notation for rust using macro and duck typing
  • Do Notation revisited · Issue #13 · highj/highj

    igrep
    igrep 2016/05/06
    highjを拡張してJavaでもdo記法をシミュレートしようぜ、と言う話。ますます誰得感が増すなあ…。
  • Stateモナドで遊んでみよう - Qiita

    これはHaskellアドベントカレンダー2015の7日目の記事です。 「すごいHaskell楽しく学ぼう」を一通り読んだくらいの方が対象(のつもり)です。 導入 ネットの海を見渡してみると、沢山の人が様々なモナドチュートリアルを書いていますが、 よくわからない時は解説を色々読むよりも手を動かして、使い慣れてしまうのが結局早いと私は思っています。 というわけで、Stateモナドを題材にいくつか演習問題を提供してみようというのが当記事の趣旨です。 Stateモナドとはなんぞや ここではHaskellWikiの記事やHackageをベースに、Stateモナドの大ざっぱな使い方だけを解説します。 そんなもん知っとるわい! という方は「使ってみよう」までスキップしていただいて構いません。 また、「すごいHaskell楽しく学ぼう」を持っている方は、14.3項の解説を併せて読むとわかりやすいと思います

    Stateモナドで遊んでみよう - Qiita
  • 【ScalaMatsuriセッション当選御礼】ドワンゴ秘伝のトランザクションモナドを解説! - Qiita

    このたびはScalaMatsuriのセッションに投票していただき、ありがとうございました。 今回はそのScalaMatsuriのセッションで発表予定の内容の一つであるドワンゴ秘蔵のトランザクションモナドについて解説したいと思います。 このトランザクションモナドは基的な機能だけなら30行ほどの短いコードで記述できてしまうのですが、なかなか説明が難しい代物でして、 ScalaMatsuriの自分の発表時間内に聴衆のみなさんに理解していただくのは難しいだろうということで、先に解説記事を書くことにしました。 このトランザクションモナドは作者の名前から通称Fujitaskと呼ばれているのですが、作者の方は周りから「天才」と言われてまして、彼は常人が思いつかないようなコードを書かれるんですね。 Fujitaskは短いながらも、モナドと、サブタイピング(変位指定)と、アドホックポリモーフィズムの三つの

    【ScalaMatsuriセッション当選御礼】ドワンゴ秘伝のトランザクションモナドを解説! - Qiita
  • モナド教

    前提知識:モナド モナドを理解せずともモナド教を信ずることは出来ますが,理解していればより深く納得できるでしょう. 操作 :: 型 -> 型 は,"型"から"型"へ写す"操作"の存在を表します. モナドの文脈 m が必要とする2つの操作: return :: a -> m a で,値を保ちつつ文脈 m の中に入れ込むことが出来ます. (=<<) :: (a -> m b) -> (m a -> m b) で,「値を文脈に入った別の値へ写す操作」を「文脈に入った値を同じ文脈に入った別の値へ写す操作」に変換します. id :: a -> a は値をそのまま返す操作です. id を =<< で変換して得られる操作 join :: m (m a) -> m a で,二重に文脈に入った値を一重の文脈に入った値に戻すことが出来ます. 文脈の値から生の値を取り出す型 m a -> a を持つ操作は,一般

    igrep
    igrep 2015/10/24
    “あの世からこの世に戻ってくる( m a -> a 型の)操作は用意されていません.”マジレスするとそれがないのってIOモナドぐらいでは...
  • モナドトランスフォーマー・ステップ・バイ・ステップ(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) - りんごがでている
    igrep
    igrep 2015/10/14
    日本語版あったんだ!ありがとう!
  • モナド基礎勉強会 参加・LTしました + 【重要】発表内容の訂正 :: Igreque -> Info

    モナド基礎勉強会 参加・LTしました + 【重要】発表内容の訂正 by Yuji Yamamoto on March 23, 2015 3月21日土曜日、名古屋で行われたモナド基礎勉強会に参加し、LTしました。 後れ馳せながら感想記事です。 知ったこと やはり想像通りの難しさで内容の9割は理解できなかったように思いますorz 事前にLTのために初歩的な部分は理解したつもりだったので結構行けるかな、と思いましたが甘くないですねー。 そんな中でもふんわりと理解できたこととその印象を。(一部、@khibinoさんからアドバイスを元に得た理解もあります。) 圏論の基礎は全部読むんじゃなくてリファレンス的に持っておくといいそうですね!特に前書きは地雷らしい。 モナドが「モノイド対象」たるゆえんはjoinが結合則を満たすところにあるそうです。だからjoinはあんなに持ち上げられる 1のか… Freeモ

    igrep
    igrep 2015/03/23
    遅ればせながら感想エントリですっ!楽しい会をありがとうございました! #monadBase
  • モナドトランスフォーマーとその周辺 - Qiita

    モナドに関する記事は世の中に沢山ありますが、モナドトランスフォーマーに関する記事はあまりないように思います。その概念が意味する所はHaskell初心者はもちろんのこと、他の言語使用者も知っておいて損は無いと思います。 モナドトランスフォーマーとは、「モナド変換子」とも言いますが、モナドと組み合わせる事で、新しいモナドを生み出すことが出来るデータ構造の事です。 例えばモナドIO1とトランスフォーマーStateT sを組み合わせると、StateT s IOというモナドになります。組み合わせた結果がモナドなので、これもさらに他のトランスフォーマーと組み合わせる事も出来ます。そこでReaderT rを組み合わせてみます。すると、ReaderT r (StateT s IO)というモナドになります。さらにEitherT eを組み合わせると、EitherT e (ReaderT r (StateT s

    モナドトランスフォーマーとその周辺 - Qiita
  • Haskellでハトクラを表現する - haru2036のブログ

    この記事はHaskell Advent Calendar 17日目の記事です。 What is ハトクラ ハトクラとは、ドミニオンの変種みたいなカードゲームです。 ただし、カードの連結が続く限りカードをプレイできるというルールが加わっています。 こんな感じ …… ん……?連結……? これってモナドになりませんか?(これってトリビアになりませんか?的ノリ) そこで、今回はハトクラの一部(アクションフェーズ, またはメインフェーズ)を表現するモナドを作ってみようと思います。 やってみる これはおそらくStateモナドの変種みたいな感じで行けるのではと思いました。ただ、一番後ろのカードに連結マークがない(=もう連結できない)状態をどうにかして表現しないといけません。 まずはなんかと合成できないかと考えてみたりしてたのですが、何と合成しようかなあと考えてました。 @haru2036 残りアクション

    Haskellでハトクラを表現する - haru2036のブログ
  • モナド入門以前 - Qiita

    前書き これはモナドチュートリアルではない、だろう。 この文章を書く動機は、モナドを知らない人がモナドという未知の概念に期待しているものが根的にずれているかもしれないという懸念である。 命令型言語でプログラミングを覚えた人がモナド、もしくはHaskellや関数型言語(と言われる言語)を学習する際にしばしば受ける助言はこうだ: 「命令型言語で今まで習ったことを全て忘れて取り組むと良いよ」 この助言はそこまで外していないかもしれないが、雑である。 いつか僕の友人がこのようなことを言った: 「プログラマがチームで働く時、必要なのは相手を思いやる気持ちだよね」 この発言は恐らくそこまで外れてはいないが、思いやりで全てを解決しようとすると、全てのコストが非常に高くなる。個々の問題へ目を向け、それぞれの解法を知っておくことによってコストは低くすることが出来ると僕たちは知っている。まあ友人はそんなこと

    モナド入門以前 - Qiita
    igrep
    igrep 2014/12/17
    “Haskellはまだまだ発展途上だと思っていて、未だ使い途が見つかっていない数学オブジェクトがごろごろ転がっているHaskellを僕は本当にクールだと思っている。代数的性質が先に転がっているのだ...”