Why the compiler does not commit to a type class?

hi, Prelude> u = undefined Prelude> k :: (Ord a, Num b) => a -> b -> a; k = u Prelude> :t k 1 2 k 1 2 :: (Ord a, Num a) => a Prelude> :t k (1 :: Integer) 2 k (1 :: Integer) 2 :: Integer In the first version the compiler is not really pushed so it simply gives back the type class constriction it has to adhere to. While in the second it is pushed to give an more specific answer and thus the :: Integer. Question: Is this train of thought correct?

Yes - if you look at the number types, you will find different number types and not integer types are providing support that’s not in Integer, so compiler is giving safest assumption. Sent from my iPhone
On Apr 17, 2020, at 12:56 PM, Alexander Chen
wrote: hi,
Prelude> u = undefined Prelude> k :: (Ord a, Num b) => a -> b -> a; k = u
Prelude> :t k 1 2 k 1 2 :: (Ord a, Num a) => a
Prelude> :t k (1 :: Integer) 2 k (1 :: Integer) 2 :: Integer
In the first version the compiler is not really pushed so it simply gives back the type class constriction it has to adhere to. While in the second it is pushed to give an more specific answer and thus the :: Integer.
Question: Is this train of thought correct?
_______________________________________________ Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
participants (2)
-
Alexander Chen
-
Jason Chau