2007-10-25から1日間の記事一覧

フィールドラベルの更新

フィールドラベルを持つ data 型の更新の文法がなんかださく感じます。 updateFoo g v = g { fooField = v } ラベルをパラメータ化できたら便利なのになあ。 update g f v = g { f = v } でもこれ、参照透明性を失うかな?よく考えてないけど。

グローバル変数のモジュール性

StateT が使えるようになったらグローバル変数みたいなものが簡潔に書けるのかなーと考えました。グローバル変数たちを集めた data 型を定義して、トップレベルは基本的に StateT GlobalVars IO () 型にする感じ。 module Main(main) where import Control.M…

猿でも持ち上げられるモナド

最近やっとモナドの持ち上げ方を理解した気分になりました。StateT + IO 限定で。State モナドを使って以下のようなコードを書いていたとき、 module Main(main) where import Control.Monad.State -- 階乗計算 fact :: State (Int, Int) Int fact = do (a, …