2010-08-14 [長年日記]
λ. Real World Haskell読書会 2010-08
私は前回おやすみしてしまったので久しぶり。 今回は14章「モナド」のあたり。
(>>=) は左結合なんだ、知らなかった。
というか、考えて見れば引数の型が違うので、m >>= f >>= g は (m >>= f) >>= g でなくてはならなくて、m >>= (f >>= g) としたら型が合わなくなってしまうので、当たり前といえば当たり前。
でも、(>>) も左結合なので、Nothing >> m1 >> m2 は Nothing >> (m1 >> m2) ではなく、(Nothing >> m1) >> m2 と解釈される。そのため、この場合 m1, m2 は評価されないけど、二つの (>>) は短絡されずに評価されてしまう。
まあ、こんな明らかな場合には最適化できてしまうと思うけれど。
MonadがFunctorのサブクラスでなくなったのがいつかという話になったが、Haskell 1.3 report で型構築クラスが導入されMonadクラスも導入されたときには、すでに今の形だったようだ。 ということは、MonadがFunctorのサブクラスであったことがあるのはGoferの方だけであって、HaskellではMonadがFunctorのサブクラスであったことはないのか。
関連
[ツッコミを入れる]
![[nobsunのbfold]](./images/s20100814_0.jpg)
