
Thanks for mentioning this. However, (:=) is a rather attractive constructor to use
Yes, indeed.
and I wonder if a monomorphic binding is used enoug to justify taking another operator away.
The choice between polymorphism and sharing is fundamental enough that I think it's worth an operator symbol (*). Of course it doesn't need to be (:=), but it shouldn't be too weird, either.
BTW, you can specify a monomorphic binding in GHC by using a result type signature. eg. x :: a = ... is a monomorphic binding for x. The type variable 'a' need not be in scope, although this binding brings it into scope in the body of x. This behaviour is the result of some recent changes to the scoped type variable extension, IIRC. The documentation looks like it could do with some updating. Cheers, Simon