Re: [Haskell-cafe] Adding Ord constraint to instance Monad Set?

My intention was that the context before a data constructor shall mean that the variable (a) shall be constrained only in the type of the constructor function, not in the type definition.
Okay, functional laguages have the notion that binding a variable is true for all time (like in mathematics)... Therefore if "a" is "1" then it has type Integer - forever. In this case the type of a in the first definition is "forall a . Num a". This is true for all references to a where we mean the same a. Because a is on the left-hand-side of the equals we assume all a's on the right are the same (it is the only rational choise) and hence we end up with two different types for a single variable. you could say something like (this doesn't work by the way) data Either a = (forall a . Num a => Left a) (forall a . Ord a => Right a) But here the a in each set of brackets has nothing to do with the a on the left hand side. This is different from: (data Either a = Num a => Left a | Ord a => Right a) where it is clear a == a but Ord a /= Num a Doing anything different would break the scoping rules for variables, and it is much more important IMHO to keep these consistant. Good languages are: Consistant, Symmetric, and Complete. Regards, Keean.
participants (1)
-
MR K P SCHUPKE