トップ «前の日記(2010-08-10) 最新 次の日記(2010-08-21)» 月表示 編集

日々の流転


2010-08-14 [長年日記]

λ. Real World Haskell読書会 2010-08

私は前回おやすみしてしまったので久しぶり。 今回は14章「モナド」のあたり。

(>>=) は左結合なんだ、知らなかった。 というか、考えて見れば引数の型が違うので、m >>= f >>= g(m >>= f) >>= g でなくてはならなくて、m >>= (f >>= g) としたら型が合わなくなってしまうので、当たり前といえば当たり前。

でも、(>>) も左結合なので、Nothing >> m1 >> m2Nothing >> (m1 >> m2) ではなく、(Nothing >> m1) >> m2 と解釈される。そのため、この場合 m1, m2 は評価されないけど、二つの (>>) は短絡されずに評価されてしまう。 まあ、こんな明らかな場合には最適化できてしまうと思うけれど。

MonadがFunctorのサブクラスでなくなったのがいつかという話になったが、Haskell 1.3 report で型構築クラスが導入されMonadクラスも導入されたときには、すでに今の形だったようだ。 ということは、MonadがFunctorのサブクラスであったことがあるのはGoferの方だけであって、HaskellではMonadがFunctorのサブクラスであったことはないのか。

[nobsunのbfold]

関連

Tags: haskell