The Haskell Wikibook обеспечивает одинПравильная реализация foldl1
foldl1 :: (a -> a -> a) -> [a] -> a
foldl1 f (x:xs) = foldl f x xs
foldl1 _ [] = error "Prelude.foldl1: empty list"
, что не работает. Я пытался скомпилировать эту версию этого:
myFoldl1 :: (a -> a -> a) -> [a] -> a
mFoldl1 f (x:xs) = myFoldl1 f x xs
myFoldl1 _ [] = error "Prelude.foldl1: empty list
Я сначала подумал, что пропал без вести дело до конца раз и была проблема с печатал
foldl1 _ [x] = x
foldl1 f (x:xs) = foldl (f x) xs
Но это не будет работать либо. Я думаю, что проблема с типом идет глубже, но у меня нет достаточного понимания Хаскелла, чтобы думать дальше. Кто-нибудь может мне помочь?
Определить, что «не работает». Вы получаете ошибку компиляции или ошибку времени выполнения или просто не можете завершить работу? Код, который вы предоставили, отлично работает на моем GHC. –
С myFoldl1 я получаю ошибку компиляции «ошибка типа - объединение дало бы infinte type» – Tina
Хм ... это очень странно. Это полное сообщение об ошибке? Если да, то какой компилятор вы используете? –