2 ms·
(Different poster.) In fact, one of the beautiful things about Haskell is that the type system can (usually) infer exactly as much specificity as is needed.
by michaelochurch 12y ago
(Different poster.) In fact, one of the beautiful things about Haskell is that the type system can (usually) infer exactly as much specificity as is needed.
λ> :t 5
5 :: Num a => a
λ> :t 5.6
5.6 :: Fractional a => a
λ> :t (5 :: Integer)
(5 :: Integer) :: Integer
The type of the literal "Num a => a" means that the literal "5" works for any type in the Num typeclass. So you can mix literals with any numeric type because the compiler will correctly infer the right type. You can even get usages like this:
λ> :t (\x -> x + 5)
(\x -> x + 5) :: Num a => a -> a
λ> let f = (\x -> x + 5) in (f (0 :: Int), f (0 :: Double))
(5,5.0)