Re:A Year in Clojure
by StreamBright on Sunday October 07, 2018 @01:03PM
(#18161552)
The signature is not really helpful. Can you show me how do you implement the actual function?
If you have operators that are typed like + and +. how can you make this work with Num?
Also the + operator is typed with Num; from a Haskell repl:
λ> :t (+)
(+) :: Num a => a -> a -> a
In case of average we need /: λ> :t (/)
(/) :: Fractional a => a -> a -> a
So our type is going to be constrained by Fractional instead of Num). So an implementation could be (from here [1]): import Data.List
average :: (Real a, Fractional b) => [a] -> b
average xs = realToFrac (sum xs) / genericLength xs
[1]: https://stackoverflow.com/questions/2376981
avg :: Num a => a -> a -> a
Where your "a" is a number (that is, a type that implements the Num typeclass)
This would work out of the box on floats, ints, etc