The monomorphism restriction and monomorphic pattern bindings

Simon Marlow marlowsd at
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

     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


More information about the Haskell-prime mailing list