a -> b -> a
fold left が期待する関数が、ではなく型シグネチャを持っているのはなぜだろうかb -> a -> a
。この背後にある設計上の決定はありますか?
たとえば、Haskell ではfoldl (\xs x -> x:xs) [] xs
、短いリストではなくリストを逆にするように書く必要foldl (:) [] xs
があります (これは で可能b -> a -> a
です)。一方、標準を必要とするユースケースもありますa -> b -> a
。Scala では、これは appending:xs.foldLeft(List.empty[Int]) ((xs, x) => xs:+x)
である可能性があり、 として記述できますxs.foldLeft(List.empty[Int]) (_:+_)
。
代替の型シグネチャではなく、指定された型シグネチャを必要とするユースケースが比例して多く発生しますか、それとも Haskell と Scala (およびおそらく他の多くの言語) の左折畳みの設計につながる他の決定がありますか?