私が書く場合:
> let xs = [1,5,19,2,-3,5]
> foldr max 0 xs
19
> foldr1 max xs
19
そして、私が書くと(私は知っています、初期値はここでは一般的な最大値関数では正しくありません...):
> let maximum' = foldr max 0
> maximum' xs
19
しかし、私が書くと:
> let maximum2' = foldr1 max
> maximum2' xs
応答は次のとおりです。
<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
私はHaskellが初めてです。私は何を間違っていますか?foldr1
(エラーメッセージを解読できません... max
) ありがとう。
編集(回答を受け入れた後):
デフォルトルールの効果の例をさらにいくつか示すために(回答でもこれらについて説明しています):
例 1:
> let max' = max
> :t max
max :: Ord a => a -> a -> a
> :t max'
max' :: () -> () -> ()
例 2:
> let plus = (+)
> :t (+)
(+) :: Num a => a -> a -> a
> :t plus
plus :: Integer -> Integer -> Integer