
On Wed, 12 Feb 2003, Daan Leijen wrote:
Warning about the use of (:=): This symbol has been proposed by John Hughes for use in some future version of Haskell to distinguish monomorphic and polymorphic `let` constructs. (See, for example, http://www.math.chalmers.se/~rjmh/Globals.ps , section 6.) You might prefer to choose a different symbol, such as (:==) or (::=).
Thanks for mentioning this. However, (:=) is a rather attractive constructor to use and I wonder if a monomorphic binding is used enoug to justify taking another operator away.
It might be better after all to have a family of "let" bindings in a future haskell:
let -- lazy binding let! -- strict binding let$ -- > speculative binding (ie. try operationally strictly but maintain lazy
semantics) let# -- monomorphic binding ?...
-- Daan.
The trouble with this idea is that let is associated with a BINDING GROUP, not with an individual binding -- and indeed, some binding groups (e.g. the top level!) have no associated let. You really want to be able to mark, say, one top-level binding as monomorphic. So the right place to attach this information is to the syntax of the binding itself -- that is, the equals sign. John