Changes between Version 3 and Version 4 of MonomorphicPatternBindings


Ignore:
Timestamp:
Aug 11, 2006 2:11:39 PM (8 years ago)
Author:
simonpj@…
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • MonomorphicPatternBindings

    v3 v4  
    11== Make pattern bindings monomorphic == 
    22 
    3 Proposal: make all pattern bindings completely monomorphic (regardless of type signatures) 
     3=== The Proposal === 
    44 
     5I propose that we '''make all pattern bindings completely monomorphic (regardless of type signatures)'''.  As a result, the expression 
     6{{{ 
     7  let (p,q) = (\x -> x, True) in (p True, p 'c') 
     8}}} 
     9would fail to typecheck, because it requires p to be polymorphic.  The program would be rejected even if p had a type signature: 
     10{{{ 
     11  let { p :: a -> a 
     12      ; (p,q) = (\x -> x, True)  
     13  } in (p True, p 'c') 
     14}}} 
     15We need to be precise about what a "pattern binding" is.  Definition: '''a pattern binding has the form ''pat''=''rhs'', where ''pat'' is not simply a variable.  Examples: 
     16{{{ 
     17  (x,y) = e    -- Pattern binding 
     18  [x]   = e    -- Pattern binding 
     19  (x)   = e    -- Pattern binding 
     20  x@y   = e    -- Pattern binding 
     21  ~x    = e    -- Pattern binding 
     22 
     23  x     = e    -- NOT a pattern binding 
     24}}} 
     25This rule is simple and easy to remember. 
     26 
     27Notice that enclosing the variable in parens, thus (x)=e, makes it a pattern binding, and therfore forces it to be monomorphic.  So this is a way to get the monomorphic form of binding that John Hughes has, at times, argued for. 
     28 
     29Another way to say it is this: only function bindings are generalised, where a function binding has the form  
     30  f p1 ... pn = e 
     31 
     32where n>=0.   The n=0 case is a bare variable. 
     33 
     34=== Discussion === 
    535At the moment you can say 
    636{{{