2016-09-06 47 views
7

Başlık, her şeyi açıklıyor. foldl1 ve foldl' her ikisi de Foldable için genelleştirilir, foldl1' ise değil. Bu yeni bir gözetim mi? Yoksa tasarım seçimi mi?Neden foldl1 'Katlanabilir'e genelleştirilemiyor?

foldl1' tip I foldl1 aynı tip olması bekleniyor,

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

geçerli:

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

Ben de foldl1'Data.List ancak Data.Foldable tarafından ihraç görüyoruz. Belki bu ilgili?

+3

'foldl1' veya' foldl1 'işlevi' Katlanılabilir 'seçeneğine ait değildir. Katlanamaz katlanabilir kapların sınıfı olan Katlanabilir1'e aitler. Birisi bir hata yaptı ve 'Katlanabilir' içine 'foldl1' koydu. Kimsenin bu hatayı birleştirmek için kalbi olduğunu sanmıyorum. – dfeuer

+0

@dfeuer: "Katlanabilir" in tanıtımı _really_ uzun bir tartışma ve anketle önceleri değil miydi? Bu gözden kaçmış mıydı yoksa bir uzlaşma mı? – ljedrz

+0

@ljedrz Bence, "Katlanabilir" in orijinal tasarımı ile (eğer varsa) Prelude'deki 'Katlanabilir'i kullanma hakkındaki tartışmayı karıştırıyorsunuz. – Cactus

cevap

0

Belki de genelleştirilmiş form sadece would have no good place to live? Bunun arkasında bazı performans nedenleri de olabilir, ancak bu konuda hiçbir bilgi bulamadım.

+0

Data.List, her ikisi de Katlanabilir örneğinin bir parçası olan genelleştirilmiş katlama ve katlama biçimini zaten dışa aktarır. Bu nedenle, genelleştirilmiş bir foldl1 'tutarlılık uğruna hem Data.List hem de Data.Foldable'dan dışa aktarılmalıdır. – Kevin