タグ

Monadに関するpetitvioletのブックマーク (64)

  • 型引数の基本から学ぶ、FreeモナドとCoyoneda - AweKuit日記

    このエントリはScalaアドベントカレンダーの3日目です。昨日は Kuchitama さんのScalaがつないでくれた縁-NetflixMeetup Kyoto 開催後記- でした。 前おき この記事は、タイトル通りFreeモナドとCoyonedaを扱うものの、あまりそれらの直接的な話やモナモナした話ではなく、そこに至るまでの実装のあれこれを『Scalaのプログラミングとして』手探りで追ってみよう、というものです。 その過程で、特に型引数(型変数)や高階型や、それらが継承時にどう扱えるかというあたりのScalaの基にたっぷり触れます。 なので、Freeモナドに興味がない方でも 型引数で A とか F[_] とか出てくると、まだちょっとこわい Scalaでいざプログラミングすると型が合わずつまづく事が多い という方にも、役に立つ部分があると思うので参考にぜひ読んでみてもらいたいです。 もち

    型引数の基本から学ぶ、FreeモナドとCoyoneda - AweKuit日記
  • Yoneda lemmaとOperational Monad - Just $ A sandbox

    最近Haskellerの間で人気になりつつある(?)Operational Monadというものについての記事です。 サンプルプログラム Operational Monadは http://hackage.haskell.org/package/free-operational で定義されています。後でも説明しますがこれはFree Monadの構造をもったモナドになります。 以下のコードはhttps://gist.github.com/myuon/5737483に載せておきました。 {-# LANGUAGE GADTs #-} import Control.Monad import Control.Monad.Operational.Simple data Simple a where End :: Simple a Put :: String -> Simple () Get :: In

  • flatMap on the Monad in Java

    Imagine writing entire programs by coding only what is necessary. Now create an abstraction for that. There was a time when OO was considered king. Those days are over. FP is leaking into every modern JVM language and the functional programming community is pushing boundaries. This has introduced new challenges for traditional Java programmers. We need to learn some FP. One way to ease our way int

    flatMap on the Monad in Java
  • こもなど!コモナド!Comonad!! - capriccioso String Creating(Object something){ return My.Expression(something); }

    どうも。 清く正しいHaskell戦士ちゅーんさんです。 今日はアレです。 Comonad やってきます。 えー・・・ 「こ」 「コ」 「Co」 Coってなんすか。カレーハウスっすか。丸い響きの音を付けて可愛く見せれば良いと思ってるんですか。 いやいや、騙されませんよ、後ろのmonadから察するにどう考えても圏論用語です。当に(ry という感じで、名前からして怪しげな臭いをプンプンと漂わせているComonadを見てみたいと思います。 とりあえず、お約束なので、Hackageに行ってComonadクラスの定義を見てきましょう。 http://hackage.haskell.org/packages/archive/comonad/0.1.1/doc/html/Control-Comonad.html class Functor w => Comonad w where extract ::

    こもなど!コモナド!Comonad!! - capriccioso String Creating(Object something){ return My.Expression(something); }
  • モナドについてSwiftで説明してみた - Qiita

    モナドって何ですか? これをちゃんと説明できる人に会ったことがない。 ↑1に挑戦してみます。 まず、モナドには数学の圏論におけるモナドとプログラミングにおけるモナドがあります。圏論のモナドについては僕もよくわかっていません。圏論のモナドとプログラミングのモナドは同じものだというような説明がされていますが、当に等価なのか僕には判断できません(どうもプログラミングのモナドは圏論のモナドの条件を満たしていそうですが、逆は成り立たないんじゃないかと思っています)。 ここでは、 プログラミングにおけるモナド について説明します。コードはすべて Swift で書きます。モナドについて調べると、よく モナド則 について書いてあるんですが、肝心の記述が関数型言語で書かれていてわからん!となることが多いんじゃないかと思います。投稿では、 モナド則についても Swift の構文で記述します。 まず前半でモ

    モナドについてSwiftで説明してみた - Qiita
  • Haskell モナド変換子 超入門 - Qiita

    Haskellではモナドと呼ばれる部品を組み合わせてプログラムを作ります。別種のモナドを組み合わせるためのモナド変換子の使い方の初歩を説明します。ライブラリで用意されたモナド変換子を手っ取り早く使うことを目的としているため、モナド変換子の作り方や圏論には言及しません。 シリーズの記事です。 Haskell 超入門 Haskell 代数的データ型 超入門 Haskell アクション 超入門 Haskell ラムダ 超入門 Haskell アクションとラムダ 超入門 Haskell IOモナド 超入門 Haskell リストモナド 超入門 Haskell Maybeモナド 超入門 Haskell 状態系モナド 超入門 Haskell モナド変換子 超入門 ← この記事 Haskell 例外処理 超入門 Haskell 構文解析 超入門 【予定】Haskell 継続モナド 超入門 【予定】Has

    Haskell モナド変換子 超入門 - Qiita
  • モナドトランスフォーマーとその周辺 - Qiita

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

    モナドトランスフォーマーとその周辺 - Qiita
  • 関数プログラミング交流会で発表した - think and error

    ブログに書くという行為を忘れがちな昨今。 9/13に関数プログラミング交流会があったので発表してきました。 http://connpass.com/event/16193/ 並行プログラミングと継続モナド from Kousuke Ruichi 関数プログラミングという題目のため、参加者はかなり広いと思われました。そのためわかり易い話題とわかり易い遷移を心がけつつコアな人にも何か持って帰るものがあるといいなーと作成しました。まあしかし発表時間の短さ故にかなり早口で喋ったため、置いて行かれたように感じた方もいたようです... twitterで質問がありましたが、スタックオーバーフローとかネタとしてはもう少しあったのですが流石に詰まりすぎかなと断念。並行プログラミングネタをもっと前面に押し出さないと題名負けかなーと思ったけどこれも色々あって断念。並行プログラミング関係なく継続モナドが便利なだけ

    関数プログラミング交流会で発表した - think and error
    petitviolet
    petitviolet 2015/11/07
    継続モナド、名前から何となく想像し辛い
  • 【ScalaMatsuriセッション当選御礼】ドワンゴ秘伝のトランザクションモナドを解説! - Qiita

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

    【ScalaMatsuriセッション当選御礼】ドワンゴ秘伝のトランザクションモナドを解説! - Qiita
  • CoproductとInjectを使ったFree Monadの合成とExtensible Effects - xuwei-k's blog

    Scaladays2014の写真がtwitter上で流れてきて「あーまたrunaroramaさん、Free Monadの話してるのかー」と思ったら、たしかにFree Monadの話もしてたみたいですが、それの発展形(?)的な感じで、Coproductや、Injectという型クラス(?)の話をしていたようです。 Woah, Coproducts (URL as replacement for transformer stacks look pretty cool! URL /cc @runarorama 2014-06-17 20:43:56 via Twitter Web Client それで、*1コードを読んでみたら、それなりにある程度理解できた気がするので、解説を書いてみます。*2 最初に断っておくと、タイトルに"Extensible Effects"と入れましたが、Extensibl

    CoproductとInjectを使ったFree Monadの合成とExtensible Effects - xuwei-k's blog
  • 本物のFree MonadPlus? - xuwei-k's blog

    「もう一度来てください。物のFree MonadPlusを見せてあげますよ」 そう言い残してScalaちゃんは去っていった・・・。 というわけで(どういうわけだよ!) 物のFree Monadって存在したのか!?っていうメモを書いておきたいと思います。 いや、実は知ってる人にとっては常識だったのかよくわかりませんが、自分は知らなかったので。 (というかekmett/freeにないなら、そもそも不可能なのではないか?くらいに思ってた) "物の" とはどういうことか?というと、偽者(MonadPlus則を満たさない)が以前 ekmett/free の内部に存在して、自分が指摘したら消えてしまった事件(?)があったのです。 issue報告したらFree MonadPlusが消えた さて、それでなんとなく寝起きでtwitterで流れてきた"ある論文"を読んでいたら、Free MonadPlu

    本物のFree MonadPlus? - xuwei-k's blog
  • 「モナドは単なる自己関手の圏におけるモノイド対象だよ。何か問題でも?」 - Qiita

    $\mathcal{C}$を圏とする. 組$(T,\eta,\mu)$が$\mathcal{C}$上の モナド とは, 関手$T:\mathcal{C} \to \mathcal{C}$および自然変換$\eta: 1 \to T$, $\mu: T^2 \to T$が以下を満たすこととする. $\mu \circ \mu T = \mu \circ T \mu$ $\mu \circ \eta T = 1 = \mu \circ T \eta$ 以下の図式を考えると良い. http://ja.wikipedia.org/wiki/モナド_(圏論)#.E5.AE.9A.E7.BE.A9 あるいは, 以下のstring diagramを考えても良い. monad pic.twitter.com/dOOZviGmOM — みょん (@myuon_myon) 2014, 12月 26 モナドとは関

    「モナドは単なる自己関手の圏におけるモノイド対象だよ。何か問題でも?」 - Qiita
  • Monad

    A x N (N は計算量) Monad の例題 部分計算 計算には例外が付きものである。例外として未定値を返せる計算を考えよう。この時に、返す値は、通常返される値と、未定値のSum型になる。型変数を持つデータ構造は Functor だったのを思い出して、 data maybe {c : Level} (A : Set c) : Set c where just : A → maybe A nothing : maybe A Maybe : Functor Sets Sets Maybe = record { FObj = λ a → maybe a ; FMap = λ {a} {b} f → fmap f ; isFunctor = record { identity = extensionality {zero} ( λ x → ? ) ; distr = extensionalit

  • scalaz/core/src/main/scala/scalaz/Coyoneda.scala at 7bbe2669267e992dc96d8e0e7e9e5d7c54a70033 · scalaz/scalaz

    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

    scalaz/core/src/main/scala/scalaz/Coyoneda.scala at 7bbe2669267e992dc96d8e0e7e9e5d7c54a70033 · scalaz/scalaz
  • Compositional application architecture with reasonably priced monads

    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

    Compositional application architecture with reasonably priced monads
  • そろそろ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モナドに関して一言いっとくか - モナドとわたしとコモナド
  • 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モナドを超えた!?operationalモナドを使ってみよう - モナドとわたしとコモナド

    限定版IOみたいなモナドを簡単に作れたら、コードが分離できるしテストもしやすくなるのになあ… 数か月前なら、 それ、Freeモナド*1でできるよ! と返されるだろう。だが今は違う。Freeモナドよりも簡単にモナドを作れるモナド、Operationalモナドがあるのだ。 Freeモナドについて復習しよう。FreeモナドはFunctorを基にMonadを作れる構造であり、Functorで自分自身を包むことによってモナドの力を得ている*2。FunctorそのものはDeriveFunctor拡張を使って簡単に作れる。 {-# LANGUAGE DeriveFunctor #-} import Control.Monad.Free data CharIO a = PutCh Char a | GetCh (Char -> a) | LiftIO (IO a) deriving Functor put

    Freeモナドを超えた!?operationalモナドを使ってみよう - モナドとわたしとコモナド
  • DDD.scala

  • 独習 Scalaz — Free Monad

    この記事は Rúnar の助言に基づいて大幅に手を加えた。古い版は github のソースを参照してほしい。 Free Monad 今日は、Gabriel Gonzalez の Why free monads matter を読みながら Free モナドをみていく: 構文木の質を表す抽象体を考えてみよう。[中略] 僕らの toy 言語には 3つのコマンドしかない: output b -- prints a "b" to the console bell -- rings the computer's bell done -- end of execution 次のコマンドが前のコマンドの子ノードであるような構文木としてあらわしてみる: data Toy b next = Output b next | Bell next | Done とりあえずこれを素直に Scala に翻訳するとこう