functional programming - Haskell - what is wrong with this function? -
i trying compute harmonic series function below. there's type error , not quite sure mean? question, why [5..1] gives empty list?
sumhr = foldr (+) 0 (\x -> map (1/) [1..x])
error message:
*** expression : foldr (+) 0 (\x -> map (1 /) (enumfromto x 1)) *** term : \x -> map (1 /) (enumfromto x 1) *** type : b -> [b] *** not match : [a]
the error telling code not well-typed , doesn't make sense.
your function:
sumhr = foldr (+) 0 (\x -> map (1/) [1..x])
consider:
prelude> :t foldr foldr :: (a -> b -> b) -> b -> [a] -> b
so true, (+)
first argument , types must unify (a -> b -> b
, num => -> -> a
unify num => -> -> a
).
the second argument given type variable b
, know must num => a
. fine, have provided 0
second argument.
the third argument must agree type num => [a]
. however, have provided second argument function:
prelude> :t (\x -> map (1/) [1..x]) (\x -> map (1/) [1..x]) :: (enum b, fractional b) => b -> [b]
unless can show compiler how type of (enum b, fractional b) => b -> [b]
can made same num => [a]
stuck.
you might have ment function such as:
sumhr x = foldr (+) 0 (map (1/) [1..x])
Comments
Post a Comment