Hatena::Grouphaskell

[ pred x | x <- "Ibtlfmm!ojllj" ] RSSフィード

2012-07-07

mtlが変わってる 01:21

Haskell Platformを入れてみたら、標準のモナドが様変わりしていた。

Control.Monad.Reader> Reader id
<interactive>:1:1: Not in scope: data constructor `Reader'

なんと、Reader、Writer、Stateすべてコンストラクタが軒並みなくなっている。

標準の同梱ライブラリ一覧のなかで、標準のモナドはこのあたり。

代わりになる関数はすべてクラスに取り込まれていた。

reader :: (MonadReader m r) => (r -> a) -> m a
writer :: (MonadWriter m w) => (a, w) -> m a
state :: (MonadState m s) => (s -> (a, s)) -> m a

ピュアな処理をモナドに入れるという変換に再解釈。

コンストラクタがなくなって、Stateなどのピュア版の定義はIdentityを使ったtypeエイリアスに置き換わった*1

type Reader r = ReaderT r Identity
type Writer w = WriterT w Identity
type State s = StateT s Identity
type Cont r = ContT r Identity

Contは半端にそのまま。

cont :: ((a -> r) -> r) -> Cont r a

ErrorTのピュア版のEitherは変化なし。

*1:typeは型引数残っててもよくなったのか

トラックバック - http://haskell.g.hatena.ne.jp/illillli/20120707