Jeśli piszę:foldr vs użytkowania foldr1 w Haskell
> let xs = [1,5,19,2,-3,5]
> foldr max 0 xs
19
> foldr1 max xs
19
A jeśli piszę (wiem, wartość początkowa jest nieprawidłowy tutaj ogólnej maksymalnej funkcji ...):
> let maximum' = foldr max 0
> maximum' xs
19
Ale jeśli piszę:
> let maximum2' = foldr1 max
> maximum2' xs
odpowiedź brzmi:
<interactive>:61:11:
Couldn't match expected type `()' with actual type `Integer'
Expected type: [()]
Actual type: [Integer]
In the first argument of maximum2', namely `xs'
In the expression: maximum2' xs
Jestem nowy w Haskell. Co ja robię źle? (Nie można odszyfrować komunikatu o błędzie ...) Jak korzystać z foldr1
z max
? Dzięki.
EDIT (po zaakceptowaniu odpowiedź):
Wystarczy pokazać jeszcze kilka przykładów Efekt rules zalegających (odpowiedź wyjaśnia nich zbyt):
Przykład 1:
> let max' = max
> :t max
max :: Ord a => a -> a -> a
> :t max'
max' ::() ->() ->()
Przykład 2:
> let plus = (+)
> :t (+)
(+) :: Num a => a -> a -> a
> :t plus
plus :: Integer -> Integer -> Integer
bał ograniczenie monomorfizm. – augustss
wystarczająco funnie: 't foldr1 max' daje' Ord a => [a] -> a' i 'let maximum 'l = foldr1 max l' działa zgodnie z oczekiwaniami – soulcheck
@augustss brakuje linku do [ograniczenia monomorfizmu] (http://www.haskell.org/haskellwiki/Monomorphism_restriction) – soulcheck