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のサブクラスであったことはないのか。