
18 Nov
2010
18 Nov
'10
3:59 a.m.
Daniel Fischer
On Wednesday 17 November 2010 19:09:16, Jerzy M wrote:
Hallo, let me take this simple function: (2*). If I check its type
:t (2*)
I'll obtain (2*) :: (Num a) => a -> a
But now it suffices to write g = (2*) and check
:t g
to obtain g :: Integer -> Integer
One more combination, now I write h x = (2*) x and check once more
:t h
to get h :: (Num a) => a -> a
So my question is: why (in this second example) Integer is inferred? What makes a difference?
The monomorphism restriction.
And default. If you load this into ghci module Main where default (Int) g = (2*) main = putStrLn "foo" and type :t g you'll get Int -> Int -- Jón Fairbairn Jon.Fairbairn@cl.cam.ac.uk