本記事の目的 解説 Stateモナドの定義 ひとつの補題 コードを読み解いていく まずは部分的に そして全体へ まとめ 本記事の目的 Stateモナドの挙動を定義から導出したい. それが本記事の目標です. Stateモナドについて調べると, いくつかの記事がヒットします. そこではStateモナドの使い方として以下のようなサンプルコードが引き合いに出されることが多いでしょう. import Control.Monad.State pickHead :: State [Int] Int pickHead = do x:xs <- get -- 状態(整数のリスト)を取得 put xs -- 先頭以外の部分を新たな状態としてセット return x -- 先頭を返す sumHeads :: State [Int] Int sumHeads = do x <- pickHead -- 先頭を取得