Generalizing layered patterns to conjunctive patterns

From Successor ML

Jump to: navigation, search



We propose generalising layered to patterns to conjunctive patterns.

Motivation and Example

SML provides layered patterns vid as pat to allow naming a value and simultaneously matching its structure. The name must be put first. However, depending on the situation, it often is more convenient to put the name last.

Instead of adding a second syntactic form, we propose generalizing layered patterns to arbitrary conjunctive patterns pat_1 as pat_2, which trivially supports both forms, while also eliminating grammar problems that exist with the current syntax (it is not LR(1)).




Defined by the following modification to the Definition:

  • In Section 2.8, Figure 3, and in Appendix B, Figure 22, replace the production for layered patterns with:
   pat_1 as pat_2    conjunctive
  • In Appendix A, Figure 16, remove the box for pattern rows.

Static Semantics

Defined by the following modification to the Definition:

  • In Section 4.10, Patterns, replace rule 43 with:
   C |- pat_1 => (VE_1,tau)    C |- pat_2 => (VE_2,tau)    Dom VE_1 \cap Dom VE_2 = 0
   ----------------------------------------------------------------------------------   (43)
                       C |- pat_1 as pat_2 => (VE_1 + VE_2,tau)
  • In Section 4.11, add the following bullet:
Every pattern of the form pat_1 as pat_2 must be consistent, i.e. there must exist at least one value that is matched by both patterns.

Dynamic Semantics

Defined by the following modifications to the Definition:

  • In Section 6.7, Patterns, replace rule 149 with:
   E,v |- pat_1 => VE_1    E,v |- pat_2 => VE_2/FAIL
   -------------------------------------------------   (149)
      E,v |- pat_1 as pat_2 => (VE_1 + VE_2)/FAIL
  • Add the following rule:
       E,v |- pat_1 => FAIL
   -----------------------------   (149a)
   E,v |- pat_1 as pat_2 => FAIL




This is a conservative extension.


Pattern matching is not complicated significantly by the change. It actually simplifies parsing. The extension has already been implemented in Alice ML.

Personal tools