
On Thu, 8 Feb 2001, Tom Pledger wrote:
nice answer: give the numeric literal 10 the range type 10..10, which is defined implicitly and is a subtype of both -128..127 (Int8) and 0..255 (Word8).
What are the inferred types for f = map (\x -> x+10) g l = l ++ f l ? I hope I can use them as [Int] -> [Int].
x + y + z -- as above
--> (x + y) + z -- left-associativity of (+)
--> realToFrac (x + y) + z -- injection (or treating up) done -- conservatively, i.e. only where needed
What does it mean "where needed"? Type inference does not proceed inside-out. What about this? h f = f (1::Int) == (2::Int) Can I apply f to a function of type Int->Double? If no, then it's a pity, because I could inline it (the comparison would be done on Doubles). If yes, then what is the inferred type for h? Note that Int->Double is not a subtype of Int->Int, so if h :: (Int->Int)->Bool, then I can't imagine how h can be applied to something :: Int->Double. -- Marcin 'Qrczak' Kowalczyk