タグ

monadに関するmnruのブックマーク (76)

  • そろそろ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モナドに関して一言いっとくか - モナドとわたしとコモナド
    mnru
    mnru 2014/04/28
  • A language and its interpretation - Learning free monads

  • 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); }
    mnru
    mnru 2014/03/30
  • Extensible Effects はモナド変換子に対する救世主になり得るか?

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

    Extensible Effects はモナド変換子に対する救世主になり得るか?
    mnru
    mnru 2013/07/22
  • 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

    mnru
    mnru 2013/05/27
  • 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 - ( ꒪⌓꒪) ゆるよろ日記
    mnru
    mnru 2013/05/27
  • Zuverlässiges und günstiges Webhosting | Hoststar

    mnru
    mnru 2013/04/05
  • モナモナ言うモナド入門.tar.gz

    11. (モノイダル圏の) モノイド η□M M□η I□M M□M M□I μ λ ρ α M□μ M□M (M□M)□M M□(M□M) M μ□M μ M□M M 12. Monoid a(1) prod (id, mappend’) (a, a), a ((x, y), z) -> (x, (y, z)) a, (a, a) (a, a) prod (mappend’, id) mappend’ mappend’ (a, a) prod (f, g) (x, y) = (f x, g y) a mappend’ = uncurry mappend 13. Monoid a(1) (x <> y) <> z = x <> (y <> z) prod (id, mappend’) (a, a), a ((x, y), z) -> (x, (y, z)) a, (a, a) (a, a)

    モナモナ言うモナド入門.tar.gz
    mnru
    mnru 2013/04/05
  • モナドの初歩 - 再帰の反復blog

    リスト フィリップ・ワドラー(Philip Wadler)は 「How to replace failure by a list of successes: a method for exception handling, backtracking, and pattern matching in lazy functional languages」(1985)で、失敗やバックトラックの可能性がある場合に結果をリストにして返すようにするというテクニックを紹介している。 すべての答えを探索してリストにして返す関数を呼び出しても、遅延評価言語ならば、実際にすべての答えを探索するわけではなく、必要に応じて必要なだけの答えを計算する。そのためリストを返す関数をバックトラック機構の代わりに使うことができるというのがこのテクニックのポイントになる(もちろんバックトラックが使われる全ての場合に適用できる

    モナドの初歩 - 再帰の反復blog
    mnru
    mnru 2013/03/22
  • Haskell/Understanding arrows - Wikibooks, open books for an open world

    We have permission to import material from the Haskell arrows page. See the talk page for details. Arrows, like monads, express computations that happen within a context. However, they are a more general abstraction than monads, and thus allow for contexts beyond what the Monad class makes possible. The essential difference between the abstractions can be summed up thus: Just as we think of a mona

  • 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

    mnru
    mnru 2013/01/18
  • Haskell/圏論 - Wikibooks

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

    mnru
    mnru 2013/01/16
    do 糖衣 構文 展開
  • Monads for Normal People

    InfoQ Software Architects' Newsletter A monthly overview of things you need to know as an architect or aspiring architect. View an example

    Monads for Normal People
    mnru
    mnru 2013/01/15
  • The Typeclassopediaを訳しました, The Typeclassopedia - #3(2009-10-20)

    ■ [Haskell] The Typeclassopediaを訳しました The Monad.ReaderのIssue 13に掲載されたThe Typeclassopediaという記事が、Functor, Monad, Monoid, Applicative, Foldable, Traversable, Arrowといったような型クラスについて良くまとまっていて、そのあたりを知りたい時の取っ掛かりになりそうだったので翻訳してみました。 作者のBrent Yorgeyさんからも許可がいただけたので公開します。翻訳に慣れていないので変な日語(特に専門用語の日語訳はかなり怪しい)があったり、そもそも間違っていたりするかもしれませんので、何か見つけたらコメントを頂けると助かります。 ■ [Haskell] The Typeclassopedia by Brent Yorgey <first

  • 3分で解るHaskellのArrowの基本メモ - よくわかりません

    語でArrowの説明があまり見付からなかったので、Haskell/Understanding arrows - Wikibooks, open books for an open worldを読んで理解したつもりのメモ。オリジナルの図を見ながらだと分かりやすいかも。誤り・間違いなど、乞うご指摘。 b->cな関数をArrowなるからくり箱に入れると、 (Arrow a) => a b c こんな型になる。型パラメタが、引数のbと返値のcのふたつ。 Monadは、値をからくり箱に入れたもの。からくり箱は基的に(ヘンな)値。 Arrowは、関数をからくり箱に入れたもの。からくり箱は基的に(ヘンな)関数。 arr :: (b -> c) -> a b c Monadでは、値をからくり箱に入れる関数returnがある。 Arrowでは、関数をからくり箱に入れる関数arrがある。 (>>>)

    3分で解るHaskellのArrowの基本メモ - よくわかりません
    mnru
    mnru 2012/12/26
  • 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

    mnru
    mnru 2012/12/25
  • Gmane -- Mail To News And Back Again

  • Easy Monad

    8. Monad この文書では Monad について述べます。Monad は成功しないかも知れない 計算を組み合わせる手法で、探索、IO、構文解析 などに使われます。 Monad は実はそれほど難しい概念ではありません。 "Haskell は Monad を使って参照透明性をおかすことなく IO を実現している。" といううたい文句や、"Monad を理解するのは難しいかもしれない" などという脅し を気にしないで、Haskell 98 にある定義を見れば分かりやすいと思います。 上級 Haskeller は Monad を駆使して難しいことをやりますが、 それは Monad が難しいのではなく、彼らのやっていることが難しいだけです。 つまり、Monad を使うと難しいことが出来るが、Monad そのものが難しいわけではない ということです。 1. Monad は class Haskel

    mnru
    mnru 2012/12/15
  • モナド変換子を重ねまくれ

    すごいHaskellのモナド変換子を理解したら読めばいいと思います、というか読むべき。超わかりやすかった。合体ロボ並に合成されて強そうな型に変換していく様は圧巻のゴーカイジャー(見てないからしらんけど) Monad Transformers Step by Step スマイルプリキュアで例えると、「プリキュア・レインボーヒーリング」ですね(多分)。

    モナド変換子を重ねまくれ
  • All About Monads モナドのすべて

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