a -> b -> afold 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 (およびおそらく他の多くの言語) の左折畳みの設計につながる他の決定がありますか?