3 ms·
I don't know about OCaml, but Haskell has typeclasses (which look like "polymorphic interfaces"?) so you can define functions generically and put a typeclass co
by ff_ 8y ago
I don't know about OCaml, but Haskell has typeclasses (which look like "polymorphic interfaces"?) so you can define functions generically and put a typeclass constraint to make them work on a certain class of types. E.g. your avg function would be of type:
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
- StreamBright 8y agoThe 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?
- ff_ 8y agoAlso 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 https://stackoverflow.com/questions/2376981