The monomorphism restriction and monomorphic pattern bindings

Simon Marlow marlowsd at gmail.com
Mon Apr 28 12:42:10 EDT 2008


Simon Peyton-Jones wrote:
> | The report doesn't actually mention this translation although it is
> | widely used to implement pattern bindings, and in some compilers (not
> | GHC) the translation is done before type checking.
> |
> | What's interesting to me is that perhaps this gives us a way to
> | understand what the static semantics of pattern bindings should be,
> | absent MPB. e.g.
> 
> Yes, that's a fine point.  If this became the formal definition of the *static* semantics of pattern bindings, that would be a significant improvement, because it'd give us a precise way to answer the various questions I asked. (We might or might not like the answers, but at least we could answer them.)

Ok.  So I counter-propose that we deal with pattern bindings like this:

   The static semantics of a pattern binding are given by the following
   translation.  A binding 'p = e' has the same meaning as the set of
   bindings

     z = e
     x1 = case z of { p -> x1 }
     ...
     xn = case z of { p -> xn }

   where z is fresh, and x1..xn are the variables of the pattern p.

For bang patterns, I think it suffices to say that a bang at the top 
level of p is carried to the binding for z, and then separately define 
what banged variable bindings mean (i.e. add appropriate seqs).

Does anyone see any problems with this?

Oh, and I also propose to use the terminology "variable binding" instead 
of "simple pattern binding", which is currently used inconsistently in 
the report (see section 4.4.3.2).

Cheers,
	Simon


More information about the Haskell-prime mailing list