タグ

Monadに関するjoan9のブックマーク (30)

  • 実務者のためのかんたんScalaz

    Monadic Programmingのススメ - Functional Reactive ProgrammingへのアプローチTomoharu ASAMI

    実務者のためのかんたんScalaz
  • モナド入門以前 - Qiita

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

    モナド入門以前 - Qiita
    joan9
    joan9 2015/06/29
    なるほどな〜
  • モナドとはモナドである - モナドとわたしとコモナド

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

    モナドとはモナドである - モナドとわたしとコモナド
  • Born in Tomakomai city - 今日は「モナド基礎勉強会 vol.2」の日です

    名古屋大学で開催されているモナド基礎勉強会 vol.2に来ています。 「圏論の導入、特にモノイダル構造」 / @t6sさん 圏 : (Universeを仮定。有効グラフから) 圏の例 : Set, Hask (とか), モノイド(Objectが一つの圏), poset 関手 : 圏から圏への射。射関数と対象関数。sourceとtargetを保つ。合成とidを移す。lawはDで満たされてるので不要 関手の例 : グラフの圏、Maybe 自然変換 : 関手圏の2-cell。対象から射の関数 モノイダル圏 : \(\otimes, 1, \alpha, \lambda, \rho\) これだけだと\(((a \otimes b) \otimes c) \otimes d \simeq a \otimes (b \otimes (c \otimes d))\)の同型が複数になる コヒーレンス定義の

    joan9
    joan9 2015/03/30
  • Stateモナドがわかればモナドがわかる - セカイノカタチ

    この記事は、Haskell Advent Calendar 2014 23日目の記事です。 僕自身が、駆け出しHaskellerなのであまり難しいことは書けません。きっと中級以降の人には常識的な話題で「何を今更・・・何周遅れだよ(´・ω・`)」みたいな微妙な話ですが、お付き合いください。 しかし、Haskellと言うとモナドみたいな風潮は何とかならんのか・・・。 なりません!(`・ω・´)シャキーン モナドにも種類がある ということで、モナドの話です。 モナドというのは、Monadという型クラスです。型クラスというのJavaで言うとインターフェースのようなものです。 これを実装した上で、モナド則と言われる規則をクリアし、厳しい試練に耐えぬいた型だけがMonadになれます。大変ですね。 例えば、こんな型がモナドとして知られています。 Maybe [] Identity Either Stat

    Stateモナドがわかればモナドがわかる - セカイノカタチ
  • 函数型なんたらの集い2014でモナドについて話してきた - think and error

    函数型なんたらの集い 2014 in Tokyo - connpass 最近私的にモナドが非常に熱いのでそれについて話してきました。 しかし資料としては要改善点が多いですね... 図入れるとか具体的なコード入れるとか色々出来たのですけど。 Engineer-uses-monads from Ruicc Rail 例 具体例をスライドに入れられなかったため、trivialな例を示す。 おおまかな雰囲気は感じられると思う。 明記してないけど、純粋関数は任意のモナド内でモナドとは関係なく使えます。 -- Derivingに必要 {-# LANGUAGE GeneralizedNewtypeDeriving #-} import Control.Applicative (Applicative) import Control.Monad.IO.Class (liftIO, MonadIO) imp

    函数型なんたらの集い2014でモナドについて話してきた - think and error
  • Purescript with Monad

    Effective Modern C++勉強会#7 https://github.com/herumi/emcjp/blob/master/readme.md

    Purescript with Monad
  • マクロとモナドをいつ使うかという個人的ルール - tnoda-clojure

    できればマクロもモナドも使いたくないのですが,いつ使うかということについて個人的に決めているルールを言語化してみると,どちらのルールも似ているということに気づきました. マクロクラブとモナドクラブたしか「プログラミング Clojure」というに「マクロ・クラブ」と題したマクロ利用に関するルールが書かれており,それと同じことをモナドについても考えているのだということに気づいて,書き出してみました. マクロ・クラブマクロクラブのルールは次のようなものでした. マクロを書くな (言い換えると定義済みのマクロを使う分には構わない)それが,パターンをカプセル化する唯一の方法ならば,マクロを書けただし,同等の関数呼び出しと比較して簡単に書けるのならマクロを書いても構わないモナド・クラブ「モナド・クラブ」というのは今私が勝手につけた名前ですが,ルールはマクロ・クラブに似通っています. 新しいモナドを作

    マクロとモナドをいつ使うかという個人的ルール - tnoda-clojure
  • Operationalモナドをゲームに応用した話 - モナドとわたしとコモナド

    データを処理することは、プログラミングのもっとも質的な部分である。数値、文字列、あるいはデータの集まりなどを扱うために、数々の構造が考えられてきた。Haskellにおいては、「手順」もデータとして扱うことができる。これは、DSLを作るうえで非常に有用であり、ゲーム開発やデータベース操作……手続きがかかわるあらゆるものに応用できるだろう。 手順をデータとして扱う方法として、FreeモナドとOperationalモナドがある。ここでは、Operationalモナドをゲームのキャラクターの制御に用いた例を紹介する。Freeモナドの導入については、Andres Löh氏のHaskell eXchange 2013の講演がわかりやすく、おすすめである。 データを作る アクションゲームの敵の動きとして、この二つを考えよう: 待機 接近(攻撃) 索敵(プレイヤーの位置を調べる) EnemyMというモナ

    Operationalモナドをゲームに応用した話 - モナドとわたしとコモナド
    joan9
    joan9 2013/11/22
    いまの自分のレベルではさっぱり理解できない
  • モナドはなぜHaskellでしか積極的に使われていないのか? - uehaj's blog

    (Haskellな日々になってるな…。) モナドというものがあり、Haskellで有名ですが、実際には、Java8のOptional、ScalaのOptionやfor内包表記などでは使用されています。ScalazというScalaのライブラリや、monadlogieというGroovyのライブラリでも使われています。 とはいえ、一般に、Haskellでのように積極的には使われていないというのが公平な見かたでしょう*1。Haskellでは当にいろんなものがモナド化されています。入出力(IO)、状態、失敗するかもしれない計算(Maybe、Either)、非決定計算、継続、パーサ(モナディックパーサ)、リーダ、ライタ、etc.etc……。 なぜこのような差が生じるのでしょうか? その前に、まず押さえておくべきことは、モナドは非常に汎用的な機能だということです。数学的定義はともかく、機能的に言うと、

    モナドはなぜHaskellでしか積極的に使われていないのか? - uehaj's blog
  • モナドの驚異 | matarillo.com

    2019-03-22 07:06:19 Wes DyerのBlog “Yet Another Language Geek”に、モナドに関する記事が投稿されていたので、訳してみる。 (追記)Mike Hadlowのブログ記事も、ほぼ同じような内容を扱っている。 モナドの驚異 原文 「継続」という単語を聞くと目がどんより曇ってしまうとするなら、「モナド」という単語を聞けば心が麻痺してしまうことになるでしょう。だからこそ、モナドに対してもっと聞こえのいい呼び方を考えようとしている人がいるのでしょう。たぶん。 最近、プログラミング言語理論においてモナドは有名人です。モナドはいくつものブログの表紙を飾り、さまざまなものと比較されていました。果物箱から果ては恋愛まで。モナドを理解する経験によって、痛 気持ちいい 心地 になるんだ、と、オタクたちは至る所で叫んでいます。 継続と同じように、モナドは噂に聞

    joan9
    joan9 2013/08/26
  • Extensible Effects はモナド変換子に対する救世主になり得るか?

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

    Extensible Effects はモナド変換子に対する救世主になり得るか?
  • Competitor price monitoring, Data collection & Web scraping

    Competitor Price Monitoring Dynamic pricing, price change reports & alerts

    Competitor price monitoring, Data collection & Web scraping
  • 絶対に理解出来ないモナドチュートリアル - konn-san.com

    世の中には、恐しい数のモナドチュートリアルがあって、それぞれモナドは象だとか、いや接ぎ木だ とか、プログラマブル・コンテナだとか、プログラム可能なセミコロンだとか、色々な説明がなされている。「モナド チュートリアル」で検索すれば、他にも色々に絵解きされた有象無象のモナドが大量に引っ掛かる。そうそう、モナドは単なる自己関手の圏におけるモノイド対象だよ。何か問題でも?なんてのもあったな。 この記事の目的は別に、こうした既存のモナドチュートリアルを「間違ってる!」とか「わかるわけねーよ!」といって貶そうという訳ではない。実際、既に幾多書かれているチュートリアルの中でも、僕の云いたいことと殆んど同じようなことが書かれているものは沢山ある。 では、上の膨大なリストの末尾にまた一つ「わかりやすい比喩」を付け足そうというのか?というとそういう訳でもない。そうそう、モナドは比喩ではないというチュートリアル

  • 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); }
  • モナドの六つの系統[Functor x Functor] - モナドとわたしとコモナド

    モナドは「アクション」を表す抽象的な構造である。モナドは、Haskellにさまざまな概念に対する記述能力をもたらす。 モナドの基礎 return :: a -> m a: 純粋な値をモナドで包む。 m >>= f :: m a -> (a -> m b) -> m b: モナドmに包まれた値をfに渡し、その結果として現れたモナドを結合する。 固有アクション: それぞれのモナドに固有の方法でモナドを生み出す。 実行: モナドに包まれた値を、より根源的な形に還元する。 モナド則 モナドに以下の三つの制約を課すことによって、最低限度の記述能力を保証している。 return a >>= k == k a m >>= return == m m >>= (\x -> k x >>= h) == (m >>= k) >>= h より強い制約は、より強い力を生み出す。 モナドの分類 モナドは、以下の6つ

    モナドの六つの系統[Functor x Functor] - モナドとわたしとコモナド
  • はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知

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

    はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知
  • モナドを触ってみた - melpon日記 - HaskellもC++もまともに扱えないへたれのページ

    で、こんな風に考えることにしました。 モナドは箱 モナドは単に値をくるんでるだけであると。 a をモナド化すれば m a。 でもってこうするための関数が return。単に m を付けるだけ。 モナドから値を取り出す なぜか知らないのですが、m a -> a なる関数は存在してないようです。 謎です。 ただ、do 記法というのを使えば取り出せるようです。 main = let ma = return "hoge" in do a <- ma print a return "hoge" でモナド化された ma は、do 内のみにおいてだけ a <- ma とすることで不思議な力が働いて値が取り出せます。何でこんなややこしいことするのか分かりませんが、とにかくそういうことらしいです。 モナド悲しみの連鎖 m a -> a なる関数が無いということは、一度モナド化したら、それを戻すことはできない

    モナドを触ってみた - melpon日記 - HaskellもC++もまともに扱えないへたれのページ
  • モナモナ言わない モナド入門 第二版 - monad.gby

    1 2012.11.18 2 1 3 2 DSL 4 5 Q) A) 6 Q) A) 7 8 9 Haskell 10 11 Parser data Parser a = Parser (String -> [(a,String)]) Parser pwrap :: a -> Parser a pwrap v = Parser $ \inp -> [(v,inp)] Parser pbind :: Parser a -> (a -> Parser b) -> Parser b pbind p f = ... string :: String -> Parser String string [] = pwrap [] string (x:xs) = char x ‘pbind‘ \v -> string xs ‘pbind‘ \vs -> pwrap (v:vs) 12 IO data IO

  • シェルスクリプトでMaybeモナド(その1)

    by @dekokun on 2012/08/05 13:46 Tagged as: ShellScript, Advent Calender. まえがき どうも、以前使ってたブログは開始1ヶ月たたないうちにこのブログに移設しました@dekokunです。 変態アドベントカレンダー in Summer 22日目となります。 21日目は@megascusさんの“変態”を色々な文字集合で表したものをHexDampしてみるでした。 注意書き ツッコミ歓迎(まだこのブログ、コメント欄がないですが…→コメント欄できました!!) やること シェルスクリプトでモナド作成します。今回、中途半端なのですが、まぁ、このアドベントカレンダー、3周目も回ってくると思いますのでそこまでに完全版を提出できたらと。 やろうと思った経緯 せっかく、前回のアドベントカレンダーの記事をシェルスクリプトにしたわけだし(シェルスク

    シェルスクリプトでMaybeモナド(その1)