タグ

monadに関するcracchoのブックマーク (23)

  • ついカッとなってPHPでMaybeモナドを実装した

    PHP仕事で使っているとis_nullとかissetとかemptyとか===とかの存在にイライラしてくる訳ですよ。そこでなんちゃってMaybeモナドの登場です。 なんちゃってモナドなので実用性は怪しいですが、以下のように使えます(注意:ネタ記事なので真に受けないように) <?php public function testLookupFunction() { $lookup = function($key) { return function(array $d) use($key) { return isset($d[$key]) ? Maybe::ret($d[$key]) : Maybe::ret(); }; }; $dictionary = ['a' => ['b' => ['c' => 10]]]; $result1 = Maybe::ret($dictionary) [$loo

    ついカッとなってPHPでMaybeモナドを実装した
    craccho
    craccho 2013/09/04
    俺の知ってる PHP と違う
  • Extensible Effects はモナド変換子に対する救世主になり得るか?

    Extensible Effects はモナド変換子に対する救世主になり得るか? konn-san.com Oleg, Sabry and Swords らによる Extensible Effects: An Alternative to Monad Transformers の論文を読んだメモ的な何かです。モナド変換子に関する簡単な現状確認から入ってはいますが、想定読者層は日常的にモナドやモナド変換子を用いたプログラムを書いている人達です。 どちらかというと自分向けのメモの性格が強いので、詳しい部分は論文を参照してみてください。 背景:モナド変換子とその問題 Haskell を中心に、関数型言語では副作用のある函数を合成するための手段としてモナドが広く用いられている。モナドは非常に強力な抽象化で、およそ副作用と呼べるものはモナドを使って定式化することが出来た。例えば、大域的な環境 r を

    Extensible Effects はモナド変換子に対する救世主になり得るか?
  • モナドとはモナドである - モナドとわたしとコモナド

    この記事を読む前に、絶対に理解出来ないモナドチュートリアルに一度目を通してみてほしい。モナドを理解していく上で、とても重要なことが書かれている。 改めて言おう、モナドはモナドだ。コンテナだとかプログラマブルセミコロンだという説明では、モナドのすべてを正確に表せるとは言い難い。では、モナドを過不足なく説明できる、モナド以外の言葉はあるのか? 実は、モナドを表現し、かつモナドで表現される言葉は存在する。その一つは手続きである。手続き型言語の「手続き」だ。 手続きとは何か 手続きは結果を持つ おおよそすべての手続きは何らかの結果を持つ。Haskellの()、C言語のvoid、PythonのNone、Rubyのnilなども結果の一種だ。結果が出ないとしたら、そのプログラムは停止しないか、途中で異常終了するだろう。 手続きには最小単位が存在する 処理系が扱っている以上、手続きが際限なく分解できるとい

    モナドとはモナドである - モナドとわたしとコモナド
  • モナド変換子の速さを測ってみる - モナドとわたしとコモナド

    mtl(実装はtransformers)で提供されているモナド変換子のLazy版とStrict版で、どのくらいパフォーマンスの差が出るか調べてみた。また、私がCPS(継続渡しスタイル)で実装したものとも比較してみた。 比較方法 {-# LANGUAGE FlexibleContexts #-} import Control.Monad.Reader.Class import Control.Monad.Reader as R import Control.Monad.Reader.CPS as RC import Control.Monad.Writer.Lazy as WL import Control.Monad.Writer.Strict as WS import Control.Monad.Writer.CPS as WC import Data.Monoid import Con

    モナド変換子の速さを測ってみる - モナドとわたしとコモナド
  • monad-control :: Yesod Web Framework Book- Version 1.6

    craccho
    craccho 2013/01/25
    大事そうなので理解できるまで読みたい
  • 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

  • Comprehending Monads

    What's a monad? What's a monad? trait Monad[A] { def map[B](f: A => B): Monad[B] def flatMap[B](f: A => Monad[B]): Monad[B] } Note: there is no single, special Monad base trait! Provides a standard interface for composing and sequencing operations on some contained value(s) map: Applies a "regular" function to the contained value(s) flatMap: Applies a "monadic" function to the contained value(s) T

  • 合成できるモナド、モナドが合成できる時 - 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〜
  • モナドをつくろう

    函数プログラミングの集い 2012 in Tokyo 発表スライド 継続については『簡約!? λカ娘(算)』 http://www.paraiso-lang.org/ikmsm/books/c82.html の「オール・アバウト・ケイゾク・イン・スキーム」を読むといいんじゃなイカ?

    モナドをつくろう
  • Wadler: Monads

    Monads, Arrows, and Idioms Philip Wadler The arrow calculus Sam Lindley, Philip Wadler, and Jeremy Yalloop, Journal of Functional Programming 20(1):51&em;69, 2010. We introduce the arrow calculus, a metalanguage for manipulating Hughes’s arrows with close relations both to Moggi’s metalanguage for monads and to Paterson’s arrow notation. Arrows are classically defined by extending lambda calculus

    craccho
    craccho 2012/06/26
    あとで読…めるかな?
  • 第51回 FunctorとMonadの間にあるApplicative

    第3回でFunctorクラスとMonadクラスを紹介しましたが,ここ数年の間に,FunctorクラスとMonadクラスの関係に少し変化が起こりました。Functorクラスよりも強く,Monadクラスよりも弱いクラス,すなわちFunctorクラスとMonadクラスの中間に相当するApplicativeクラスが現れ,広く使われるようになったのです。特にパーサー・ライブラリでは,Applicativeクラスおよび「Applicative版のMonoid」であるAlternativeクラスが欠かせないものになっています。 第48回でのparTraversable関数の説明,および第50回で取り上げたparMap関数/parMapM関数の定義の文脈部分で登場したTraversableクラスも,Applicativeとのかかわりが深いクラスです。 Applicativeに対する理解は,今やHaskel

    第51回 FunctorとMonadの間にあるApplicative
  • モナドとモナド変換子のイメージを描いてみた - melpon日記 - HaskellもC++もまともに扱えないへたれのページ

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

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

    This Wiki is frozen. Use GitHub for reports, discussions, etc. 訳あって Haskell 試中. モナドって, こんなイメージでいいんでしょうか? (参考ページ) やさしい Haskell 入門 (バージョン98) モナドのすべて haskell-jp ML MonadicContinuationPassingStyle (英語) 2ch Haskell スレ過去ログの 500 前後 慣れない内容は, 頭がしんどい 慣れない表現も, 頭がしんどい 両方いっぺんだと, もう○×△□… なので, ひとまず haskell は置いといて, scheme にしてみます. Intro. ふつうの「値」を包んで, ふわふわした謎な外見の何か(以下「ふわふわ」) にするラッパー ret (return のつもり)を考えよう. (ret 3)

    craccho
    craccho 2011/07/25
    最後のcall/ccが難しい。Haskell以外の言語で手を動かしてみることで、よりモナドへの理解が深まったように思う。
  • Monads in C++ |   Bartosz Milewski's Programming Cafe

    Monads in C++ Posted by Bartosz Milewski under C++, Functional Programming, Haskell, Monads, Programming, Type System [32] Comments Follow @BartoszMilewski “You must be kidding!” would be the expected reaction to “Monads in C++.” Hence my surprise when I was invited to Boostcon 11 to give a three-hour presentation on said topic, a presentation which was met with totally unexpected level of interes

    Monads in C++ |   Bartosz Milewski's Programming Cafe
  • モナドを実装する(Vim script編) | Webシステム開発/教育ソリューションのタイムインターメディア

    発端 モナドの正体が分かると、 次はモナドを実装してみたくなるものです。 前回は試しに Python でモナドを実装してみましたが、他の言語でも実装できないことはありません。 ただクロージャや部分適用が簡単に使えない言語では質的でないところで苦労する羽目になるので、前回は Python を使いました。 という訳で今回は “エディター界のPHP” でお馴染みの Vim script でモナドを実装することにしましょう。 なお、今回作成した Vim script によるモナドの実装は GitHub で公開中です。 方針 最初に Maybe のようなモナドの具体例を実装するためのフレームワークを作っておいて、次に Maybe の実装例を示すことにしましょう。 Vim script はプログラミング言語として見る分には貧弱ですが、 dictionary (他の言語で言うところのマップ/ハッシュテ

    モナドを実装する(Vim script編) | Webシステム開発/教育ソリューションのタイムインターメディア
  • モナドのすべて Haskell におけるモナドプログラミングの理論と実践に関する包括的ガイド

    モナドのすべて Haskell におけるモナドプログラミングの理論と実践に関する包括的ガイド Version 1.1.0 このチュートリアルは、モナドの概念とその関数プログラミングにおける応用に ついて、初中級の Haskell プログラマにわかりやすく、利用価値があるような 解説をすることを旨としています。読者は Haskell になれていることを前提と しますが、モナドに関する経験は要求していません。このチュートリアルは、多 くの題材をカバーしています。後半のセクションでは、前半の題材をよく理解し ていることを前提とします。順をおって、モナドプログラミングを例示するため のサンプルコードがたくさん用意されています。一読で、すべての題材を吸収し ようというのはお勧めできません。 このチュートリアルは 3 つの部分で構成されています。最初の部分は、 関数プログラミングにおけるモナドの基

  • 「モナドは象だ」の翻訳まとめ - Fight the Future

    とてもエントリが多くの回にわたったので、まとめます。 One Div Zero: Monads are Elephants Part 1 モナドについて調べていく(7) - Fight the Future じゅくのblog モナドについて調べていく(8) - Fight the Future じゅくのblog モナドについて調べていく(9) - Fight the Future じゅくのblog モナドについて調べていく(10) - Fight the Future じゅくのblog モナドについて調べていく(11) - Fight the Future じゅくのblog モナドについて調べていく(12) - Fight the Future じゅくのblog One Div Zero: Monads are Elephants Part 2 モナドについて調べていく(14) - Fig

    「モナドは象だ」の翻訳まとめ - Fight the Future
  • モナド: お前はもう知っている | Webシステム開発/教育ソリューションのタイムインターメディア

    はじめに 過去に私がHaskellを学び始めた時、 真っ先に疑問に思ったことはモナドの存在だった。 当時は全くと言っていいほど理解できなかったが、 最近Haskellを学び直して ようやく理解することができた(と思う)。 という訳で、現時点での私のモナドへの理解を示すためにこの記事を書く。 ここではモナドの質が何なのか概要を示す。 正確な説明は数多あるモナドについてのチュートリアルを参照されたい。 Hellow World問題: IO, Monad, fail 新しい言語を学ぶ時、まず間違いなくHello Worldを書くだろう。 HaskellでHello Worldを書くとこうなる: この1行だけを見ると普通の命令型言語と大して変わらないように思える。 ところでHaskellには強力な型推論がある。 そのため型宣言を省略しても処理系がよしなに解釈してくれる。 ただ普通はコードの意図す

    モナド: お前はもう知っている | Webシステム開発/教育ソリューションのタイムインターメディア
    craccho
    craccho 2011/03/31
    わかりやすい
  • Haskell/Category theory - Wikibooks, open books for an open world

    This article attempts to give an overview of category theory, in so far as it applies to Haskell. To this end, Haskell code will be given alongside the mathematical definitions. Absolute rigour is not followed; in its place, we seek to give the reader an intuitive feel for what the concepts of category theory are and how they relate to Haskell. Introduction to categories[edit | edit source] A simp

  • The Haskell Programmer's Guide to the IO Monad --- Don't Panic

    The Haskell Programmer’s Guide to the IO Monad — Don’t Panic — Stefan Klinger University of Twente, the Netherlands � EWI, Database Group CTIT Technical Report Stefan Klinger. The Haskell Programmer’s Guide to the IO Monad — Don’t Panic. Order-address: Centre for Telematics and Information Technology University of Twente P. O. Box 217 7500 AL Enschede the Netherlands mailto:a.m.annink-tanke@utwent