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

MR K P SCHUPKE k.schupke at imperial.ac.uk
Wed Mar 31 15:43:48 EST 2004

>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.


More information about the Haskell-Cafe mailing list