2016-09-06 7 views
7

タイトルはそれをすべて言っています。 foldl1およびfoldl'はともにFoldableに一般化され、foldl1'は一般化されていません。これはちょうど最近の監督ですか?それともデザインの選択ですか?なぜfoldl1はFoldableに一般化されていないのですか?

foldl1'の種類は、私はそれがfoldl1と同じ型を持つことが期待

foldl1' :: (a -> a -> a) -> [a] -> a 

です:

foldl1 :: Foldable t => (a -> a -> a) -> t a -> a 

私もfoldl1'Data.ListなくData.Foldableによってエクスポートされていることを参照してください。おそらくこれは関連しているでしょうか?

+3

'foldl1'も' foldl1''も 'Foldable'に属していません。彼らは 'Foldable1'、nonempty foldableコンテナのクラスに属します。誰かが間違いを犯し、 'foldl1'を' Foldable'に入れました。私は誰もそのエラーを複合する心がないと思います。 – dfeuer

+0

@dfeuer:「Foldable」の導入は、_議論と世論調査の長期間に先立って行われたものではなかったか?これが見落とされたのか、それとも何らかの妥協であるのか? – ljedrz

+0

@ ljedrz私は、Preludeで 'Foldable'を' Foldable'の元のデザイン(もしあれば)と使うことについての議論を混ぜていると思います。 – Cactus

答えて

0

多分一般化された形式would have no good place to live?これにはいくつかのパフォーマンス上の理由もあったかもしれませんが、それに関する情報は見つかりませんでした。

+0

Data.Listは既にfoldl1とfoldl 'の一般化された形式をエクスポートします。どちらもFoldableインスタンスの一部です。したがって、一般化されたfoldl1 'は一貫性のためにData.ListとData.Foldableの両方からエクスポートする必要があります。 – Kevin

関連する問題