このエラーは、コードが適切に型付けされておらず、意味がないことを示しています。
あなたの機能:
sumHR = foldr (+) 0 (\x -> map (1/) [1..x])
検討:
Prelude> :t foldr
foldr :: (a -> b -> b) -> b -> [a] -> b
したがって、これが真であるために(+)は、 が最初の引数であり、型を統一する (a -> b -> bおよび にNum a => a -> a -> a統一するNum a => a -> a -> a) 必要があります。
2 番目の引数には variable 型が指定されますがb、これは既に である必要があることがわかっていますNum a => a。これで問題ありません0。2 番目の引数として指定しました。
3 番目の引数は type と一致する必要がありNum a => [a]ます。ただし、関数である 2 番目の引数を指定しました。
Prelude> :t (\x -> map (1/) [1..x])
(\x -> map (1/) [1..x]) :: (Enum b, Fractional b) => b -> [b]
(Enum b, Fractional b) => b -> [b]の型を同じにする方法をコンパイラに示すことができない限りNum a => [a]、あなたは立ち往生しています。
次のような関数を使用している可能性があります。
sumHR x = foldr (+) 0 (map (1/) [1..x])