[Haskell] Re: Implicit type of numeric constants
R.J.Stroud at ncl.ac.uk
Thu Sep 21 06:32:20 EDT 2006
On 21 Sep 2006, at 10:46, Robert Stroud wrote:
>> So k gets a monotype which is determined by its usage, you cannot
>> do e.g.
>> let k = 2 ; f :: Int -> Int -> Int ; f x y = x * y in (f k k, 1/k)
>> whereas let k :: Num a => a; k = 2; ... is possible.
> Thanks - that's a helpful example. But why is the following not
> equivalent to the untyped "k = 2" case:
> let f :: Int -> Int -> Int ; f x y = x * y in (f 2 2, 1/2)
> Does the type of 2 effectively get decided twice, once as an Int,
> and once as a Fractional, and is this the "repeated computation"
> that the monomorphism restriction is intended to prevent?
> Otherwise, I would have expected that it wouldn't make any
> difference whether I used a named 2 or an anonymous 2, but imposing
> the monomorphism restriction on the named 2 seems to break
> referential transparency.
Aha - light begins to dawn... :-)
Each 2 is a different 2, so the type of 2 can be different each time
it's used, whereas there's only one k so it can only have one type.
Is that right?
More information about the Haskell