タグ

state monadに関するsiroccoのブックマーク (7)

  • Haskell: Control.Monad.Stateメモ - ラシウラ

    機能一覧や例は以下にあるけど、これだけで理解するのは正直難しい。 http://www.haskell.org/ghc/docs/6.4.1/html/libraries/mtl/Control-Monad-State.html 理解しにくそうなところを意識して書いてみる。 なにをするものか: 関数の中で上から順番にデータを更新していく処理を書きたいとき使う。だけではあるけど。 まずはimport Control.Monad.Stateを行ってState型を使い、 State stateType resultTypeという型で状態更新を利用するstateApp関数を自由に実装する(ドキュメントの例は戻り値型が同じで紛らわしいので型をStringに変えてます。$はあえてすべて()にしてます): import Control.Monad.State tick :: State Int Stri

    Haskell: Control.Monad.Stateメモ - ラシウラ
    sirocco
    sirocco 2013/11/15
    前にもブクマしていたんだけど良く理解していなかった・・・Orz
  • 状態系モナドの作り方 - capriccioso String Creating(Object something){ return My.Expression(something); }

    よく言われている事ですが、モナドには副作用を再現する「状態系モナド」(IO、State等)と、値が無い状態や計算の失敗を扱う事ができる「失敗系モナド」(Maybe、List等)の二種類に大別できます。 今回の題材は、「状態系モナド」を扱います。 状態系モナドの代表格と言えばIOですが、IOでは全体像を捉えるのが難しいので、Stateモナドについて考えてみましょう。 (※当方の環境の都合上、ソースファイルからパッケージを直接読み込んでるので表示が少し違うかもしれませんが、あまり気にしないでください。) State型自体は『s を引数として受け取り、 (a, s)というタプルを返す関数』を保持する型になっています。 *Control.Monad.State> :i State newtype State s a = State {runState :: s -> (a, s)} -- Defi

    状態系モナドの作り方 - capriccioso String Creating(Object something){ return My.Expression(something); }
  • Stateモナドを今度こそ理解する(2) - Pixel Pedals of Tomakomai

    前回の続きです。2回で終われませんでしたorz 今回は、Stateモナドの値の説明と、returnの定義です。 モナド=Stateモナドとか、モナド=IOモナドなどと思うのは危険です。「Stateモナドは、モナドインタフェースの実装例」くらいに解釈するのがいいと思います。

    Stateモナドを今度こそ理解する(2) - Pixel Pedals of Tomakomai
  • Stateモナドを今度こそ理解する - Pixel Pedals of Tomakomai

    3年前に理解しようとして惨敗した*1HaskellのStateモナドの解説に、リベンジしようと思います。圏論をちょっとはかじったので、今度こそまともな解説ができるはず。 と言うことで、今回は前編です。圏論の知識は前提とはしてないですが、集合と写像にアレルギーがあるときついかもしれません。 *1:3年前の敗因は、圏をSetsだと思い込んでた上に関手を「写像を写像に移す写像」だと誤解してたことでしょうか。

    Stateモナドを今度こそ理解する - Pixel Pedals of Tomakomai
  • State モナド | tnomuraのブログ

    State モナドの使い方がもうひとつよく分からなかったので、State Monad のチュートリアルを読んでいたら、Parsec と同じ使い方をすれば良いのだと気がついた。 Parsec ではパーサのモナドをプログラムしても、それだけでは何もしてくれない。たとえば、Parsec の(プリミティブ)関数の letter は、次のように parser 関数の引数にして実行しないとなにもしない。 Prelude Text.Parsec> parse letter "" "hello" Right 'h' また、要素的 (primitive) な関数はパーサーコンビネータと組み合わせることによって複雑なパターンに対応することができる。 Prelude Text.Parsec> parse (many1 letter) "" "hello world" Right "hello" さらに、パーサ関

    State モナド | tnomuraのブログ
    sirocco
    sirocco 2012/01/12
    State モナドの使い方。
  • はてなブログ | 無料ブログを作成しよう

    盛岡旅行記 なぜ盛岡か。 白龍 店のじゃじゃ麺 岩手銀行赤レンガ館 白沢せんべい店の南部せんべい 盛岡天満宮と盛岡八幡宮 チーズケーキのチロル 大通店のクリームチーズケーキ フェザン/イオンタウン 盛岡駅前 盛楼閣の盛岡冷麺 福田パン 長田町店のパン マルイチ 材木町店 …

    はてなブログ | 無料ブログを作成しよう
  • Haskell の State モナド (1) - 状態を模倣する

    昔、モナドがよくわからなかったので、さまよっていたら、 … ネットで見たMonadの説明で一番私がわかりやすいと思ったのは、Wikibooksの説明。Hello World!がブラックボックスな人は、是非一読を。 (404 Blog Not Found:Haskellで一番難しいのは より) 最初にこの Wikibooksの説明 を読んだのは去年の 11 月頃。そのときの文書のバージョンは  05:13, 27 October 2008 で、今は内容が随分増えている。前の文書は、現在の Haskell/Understanding monads/State に相当するようだ。 ところで、上記の解説を最初読んだとき全く意味がわからなかった。 (@_@;) 「3 Stateful Computations」 では、「ランダムな数字を生成する関数」を例に挙げてモナドの説明がされていたけれど、何が言

    Haskell の State モナド (1) - 状態を模倣する
  • 1