Syntax tree - strict mode

This chapter presents the Camlp5 syntax tree when Camlp5 is installed in strict mode.

  1. Introduction
  2. Location
  3. Antiquotations
  4. Two kinds of antiquotations
  5. Nodes and Quotations
  6. Nodes without quotations

Introduction

This syntax tree is defined in the module "MLast" provided by Camlp5. Each node corresponds to a syntactic entity of the corresponding type.

For example, the syntax tree of the statement "if" can be written:

  MLast.ExIfe loc e1 e2 e3

where "loc" is the location in the source, and "e1", "e2" and "e3" are respectively the expression after the "if", the one after the "then" and the one after the "else".

If a program needs to manipulate syntax trees, it can use the nodes defined in the module "MLast". The programmer must know how the concrete syntax is transformed into this abstract syntax.

A simpler solution is to use one of the quotation kits "q_MLast.cmo" or "q_ast.cmo". Both propose quotations which represent the abstract syntax (the nodes of the module "MLast") into concrete syntax with antiquotations to bind variables inside. The example above can be written:

  <:expr< if $e1$ then $e2$ else $e3$ >>

This representation is very interesting when one wants to manipulate complicated syntax trees. Here is an example taken from the Camlp5 sources themselves:

  <:expr<
    match try Some $f$ with [ Stream.Failure -> None ] with
    [ Some $p$ -> $e$
    | _ -> raise (Stream.Error $e2$) ]
  >>

This example was in a position of a pattern. In abstract syntax, it should have been written:

  MLast.ExMat _
    (MLast.ExTry _ (MLast.ExApp _ (MLast.ExUid _ (Ploc.VaVal "Some")) f)
       (Ploc.VaVal
          [(MLast.PaAcc _ (MLast.PaUid _ (Ploc.VaVal "Stream"))
             (MLast.PaUid _ (Ploc.VaVal "Failure")),
            Ploc.VaVal None, MLast.ExUid _ (Ploc.VaVal "None"))]))
    (Ploc.VaVal
       [(MLast.PaApp _ (MLast.PaUid _ (Ploc.VaVal "Some")) p,
         Ploc.VaVal None, e);
        (MLast.PaAny _, Ploc.VaVal None,
         MLast.ExApp _ (MLast.ExLid _ (Ploc.VaVal "raise"))
           (MLast.ExApp _
              (MLast.ExAcc _ (MLast.ExUid _ (Ploc.VaVal "Stream"))
                 (MLast.ExUid _ (Ploc.VaVal "Error")))
              e2))])

Which is less readable and much more complicated to build and update.

Instead of thinking of "a syntax tree", the programmer can think of "a piece of program".

Location

In all syntax tree nodes, the first parameter is the source location of the node.

In expressions

When a quotation is in the context of an expression, the location parameter is "loc" in the node and in all its possible sub-nodes. Example: if we consider the quotation:

  <:sig_item< value foo : int -> bool >>

This quotation, in a context of an expression, is equivalent to:

  MLast.SgVal loc (Ploc.VaVal "foo")
    (MLast.TyArr loc (MLast.TyLid loc (Ploc.VaVal "int"))
       (MLast.TyLid loc (Ploc.VaVal "bool")));

The name "loc" is predefined. However, it is possible to change it, using the argument "-loc" of the Camlp5 shell commands.

Consequently, if there is no variable "loc" defined in the context of the quotation, or if it is not of the good type, a semantic error occur in the OCaml compiler ("Unbound value loc").

Note that in the extensible grammars, the variable "loc" is bound, in all semantic actions, to the location of the rule.

If the created node has no location, the programmer can define a variable named "loc" equal to "Ploc.dummy".

In patterns

When a quotation is in the context of a pattern, the location parameter of all nodes and possible sub-nodes is set to the wildcard ("_"). The same example above:

  <:sig_item< value foo : int -> bool >>

is equivalent, in a pattern, to:

  MLast.SgVal _ (Ploc.VaVal "foo")
    (MLast.TyArr _ (MLast.TyLid _ (Ploc.VaVal "int"))
       (MLast.TyLid _ (Ploc.VaVal "bool")))

However, it is possible to generate a binding of the variable "loc" on the top node by writing a "colon" before the "less" in the quotation. The same example:

  <:sig_item:< value foo : int -> bool >>

is equivalent to:

  MLast.SgVal loc (Ploc.VaVal "foo")
    (MLast.TyArr _ (MLast.TyLid _ (Ploc.VaVal "int"))
       (MLast.TyLid _ (Ploc.VaVal "bool")))

Antiquotations

The expressions or patterns between dollar ($) characters are called antiquotations. In opposition to quotations which has its own syntax rules, the antiquotation is an area in the syntax of the enclosing context (expression or pattern). See the chapter about quotations.

If a quotation is in the context of an expression, the antiquotation must be an expression. It could be any expression, including function calls. Examples:

  value f e el = <:expr< [$e$ :: $loop False el$] >>;
  value patt_list p pl = <:patt< ( $list:[p::pl]$) >>;

If a quotation is in the context of an pattern, the antiquotation is a pattern. Any pattern is possible, including the wildcard character ("_"). Examples:

   fun [ <:expr< $lid:op$ $_$ $_$ >> -> op ]
   match p with [ <:patt< $_$ | $_$ >> -> Some p ]

Two kinds of antiquotations

Preliminary remark

In strict mode, we remark that most constructors defined of the module "MLast" are of type "Ploc.vala". This type is defined like this:

  type vala 'a =
    [ VaAnt of string
    | VaVal of 'a ]
  ;

The type argument is the real type of the node. For example, a value of type "bool" in transitional mode is frequently represented by a value of type "Ploc.vala bool".

The first case of the type "vala" corresponds to an antiquotation in the concrete syntax. The second case to a normal syntax situation, without antiquotation.

Example: in the "let" statement, the fact that it is "rec" or not is represented by a boolean. This boolean is, in the syntax tree, encapsulated with the type "Ploc.vala". The syntax tree of the two following lines:

  let x = y in z
  let rec x = y in z

start with, respectively:

  MLast.ExLet loc (Ploc.VaVal False)
    ... (* and so on *)

and:

  MLast.ExLet loc (Ploc.VaVal True)
    ... (* and so on *)

The case "Ploc.VaAnt s" is internally used by the parsers and by the quotation kit "q_ast.cmo" to record antiquotation strings representing the expression or the patterns having this value. For example, in this "let" statement:

  MLast.ExLet loc (Ploc.VaAnt s)
    ... (* and so on *)

The contents of this "s" is internally handled. For information, it contains the antiquotation string (kind included) together with representation of the location of the antiquotation in the quotation. See the next section.

Antiquoting

To antiquotate the fact that the "let" is with or without rec (a flag of type boolean), there are two ways.

direct antiquoting

The first way, hidding the type "Ploc.val", can be written with the antiquotation kind "flag":

  <:expr< let $flag:rf$ x = y in z >>

This corresponds to the syntax tree:

  MLast.ExLet loc (Ploc.VaVal rf)
     ... (* and so on *)

And, therefore, the type of the variable "rf" is simply "bool".

general antiquoting

The second way, introducing variables of type "Ploc.vala" can be written a kind prefixed by "_", namely here "_flag":

  <:expr< let $_flag:rf$ x = y in z >>

In that case, it corresponds to the syntax tree:

  MLast.ExLet loc rf
     ... (* and so on *)

And, therefore, the type of the variable "rf" is now "Ploc.vala bool".

Remarks

The first form of antiquotation ensures the compatibility with previous versions of Camlp5. The syntax tree is not the same, but the bound variables keep the same type.

All antiquotations kinds have these two forms: one with some name (e.g. "flag") and one with the same name prefixed by "a" (e.g. "aflag").

Nodes and Quotations

This section describes all nodes defined in the module "MLast" of Camlp5 and how to write them with quotations. Notice that, inside quotations, one is not restricted to these elementary cases, but any complex value can be used, resulting on possibly complex combined nodes.

The quotation forms are described here in revised syntax (like the rest of this document). In reality, it depends on which quotation kit is loaded:

Last remark: in the following tables, the variables names give information of their types. The details can be found in the distributed source file "mLast.mli".

expr

Expressions of the language.

- access
<:expr< $e1$ . $e2$ >>
MLast.ExAcc loc e1 e2
- antiquotation (1)
<:expr< $anti:e$ >>
MLast.ExAnt loc e
- application
<:expr< $e1$ $e2$ >>
MLast.ExApp loc e1 e2
- array element
<:expr< $e1$ .( $e2$ ) >>
MLast.ExAre loc e1 e2
- array
<:expr< [| $list:le$ |] >>
MLast.ExArr loc (Ploc.VaVal le)

<:expr< [| $_list:le$ |] >>
MLast.ExArr loc le
- assert
<:expr< assert $e$ >>
MLast.ExAsr loc e
- assignment
<:expr< $e1$ := $e2$ >>
MLast.ExAss loc e1 e2
- big array element
<:expr< $e$ .{ $list:le$ } >>
MLast.ExBae loc e (Ploc.VaVal le)

<:expr< $e$ .{ $_list:le$ } >>
MLast.ExBae loc e le
- character constant
<:expr< $chr:s$ >>
MLast.ExChr loc (Ploc.VaVal s)

<:expr< $_chr:s$ >>
MLast.ExChr loc s
- coercion
<:expr< ($e$ :> $t2$) >>
MLast.ExCoe loc e None t2

<:expr< ($e$ : $t1$ :> $t2$) >>
MLast.ExCoe loc e (Some t1) t2
- float constant
<:expr< $flo:s$ >>
MLast.ExFlo loc (Ploc.VaVal s)

<:expr< $_flo:s$ >>
MLast.ExFlo loc s
- for (increasing)
<:expr< for $lid:s$ = $e1$ to $e2$ do { $list:le$ } >>
MLast.ExFor loc (Ploc.VaVal s) e1 e2 (Ploc.VaVal True) (Ploc.VaVal le)

<:expr< for $lid:s$ = $e1$ to $e2$ do { $_list:le$ } >>
MLast.ExFor loc (Ploc.VaVal s) e1 e2 (Ploc.VaVal True) le
- for (decreasing)
<:expr< for $lid:s$ = $e1$ downto $e2$ do { $list:le$ } >>
MLast.ExFor loc (Ploc.VaVal s) e1 e2 (Ploc.VaVal False) (Ploc.VaVal le)

<:expr< for $lid:s$ = $e1$ downto $e2$ do { $_list:le$ } >>
MLast.ExFor loc (Ploc.VaVal s) e1 e2 (Ploc.VaVal False) le
- for
<:expr< for $lid:s$ = $e1$ $to:b$ $e2$ do { $list:le$ } >>
MLast.ExFor loc (Ploc.VaVal s) e1 e2 (Ploc.VaVal b) (Ploc.VaVal le)

<:expr< for $lid:s$ = $e1$ $to:b$ $e2$ do { $_list:le$ } >>
MLast.ExFor loc (Ploc.VaVal s) e1 e2 (Ploc.VaVal b) le

<:expr< for $lid:s$ = $e1$ $_to:b$ $e2$ do { $list:le$ } >>
MLast.ExFor loc (Ploc.VaVal s) e1 e2 b (Ploc.VaVal le)

<:expr< for $lid:s$ = $e1$ $_to:b$ $e2$ do { $_list:le$ } >>
MLast.ExFor loc (Ploc.VaVal s) e1 e2 b le

<:expr< for $_lid:s$ = $e1$ to $e2$ do { $list:le$ } >>
MLast.ExFor loc s e1 e2 (Ploc.VaVal True) (Ploc.VaVal le)

<:expr< for $_lid:s$ = $e1$ to $e2$ do { $_list:le$ } >>
MLast.ExFor loc s e1 e2 (Ploc.VaVal True) le

<:expr< for $_lid:s$ = $e1$ downto $e2$ do { $list:le$ } >>
MLast.ExFor loc s e1 e2 (Ploc.VaVal False) (Ploc.VaVal le)

<:expr< for $_lid:s$ = $e1$ downto $e2$ do { $_list:le$ } >>
MLast.ExFor loc s e1 e2 (Ploc.VaVal False) le

<:expr< for $_lid:s$ = $e1$ $to:b$ $e2$ do { $list:le$ } >>
MLast.ExFor loc s e1 e2 (Ploc.VaVal b) (Ploc.VaVal le)

<:expr< for $_lid:s$ = $e1$ $to:b$ $e2$ do { $_list:le$ } >>
MLast.ExFor loc s e1 e2 (Ploc.VaVal b) le

<:expr< for $_lid:s$ = $e1$ $_to:b$ $e2$ do { $list:le$ } >>
MLast.ExFor loc s e1 e2 b (Ploc.VaVal le)

<:expr< for $_lid:s$ = $e1$ $_to:b$ $e2$ do { $_list:le$ } >>
MLast.ExFor loc s e1 e2 b le
- function
<:expr< fun [ $list:lpee$ ] >>
MLast.ExFun loc (Ploc.VaVal lpee)

<:expr< fun [ $_list:lpee$ ] >>
MLast.ExFun loc lpee
- if
<:expr< if $e1$ then $e2$ else $e3$ >>
MLast.ExIfe loc e1 e2 e3
- integer constant
<:expr< $int:s1$ >>
MLast.ExInt loc (Ploc.VaVal s1) ""

<:expr< $_int:s1$ >>
MLast.ExInt loc s1 ""
- integer 32 bits
<:expr< $int32:s1$ >>
MLast.ExInt loc (Ploc.VaVal s1) "l"

<:expr< $_int32:s1$ >>
MLast.ExInt loc s1 "l"
- integer 64 bits
<:expr< $int64:s1$ >>
MLast.ExInt loc (Ploc.VaVal s1) "L"

<:expr< $_int64:s1$ >>
MLast.ExInt loc s1 "L"
- native integer
<:expr< $nativeint:s1$ >>
MLast.ExInt loc (Ploc.VaVal s1) "n"

<:expr< $_nativeint:s1$ >>
MLast.ExInt loc s1 "n"
- label
<:expr< ~{$p$} >>
MLast.ExLab loc p (Ploc.VaVal None)

<:expr< ~{$p$ = $e$} >>
MLast.ExLab loc p (Ploc.VaVal (Some e))

<:expr< ~{$p$ $opt:oe$} >>
MLast.ExLab loc p (Ploc.VaVal oe)

<:expr< ~{$p$ $_opt:oe$} >>
MLast.ExLab loc p oe
- lazy
<:expr< lazy $e$ >>
MLast.ExLaz loc e
- let rec
<:expr< let rec $list:lpe$ in $e$ >>
MLast.ExLet loc (Ploc.VaVal True) (Ploc.VaVal lpe) e

<:expr< let rec $_list:lpe$ in $e$ >>
MLast.ExLet loc (Ploc.VaVal True) lpe e
- let not rec
<:expr< let $list:lpe$ in $e$ >>
MLast.ExLet loc (Ploc.VaVal False) (Ploc.VaVal lpe) e

<:expr< let $_list:lpe$ in $e$ >>
MLast.ExLet loc (Ploc.VaVal False) lpe e
- let
<:expr< let $flag:b$ $list:lpe$ in $e$ >>
MLast.ExLet loc (Ploc.VaVal b) (Ploc.VaVal lpe) e

<:expr< let $flag:b$ $_list:lpe$ in $e$ >>
MLast.ExLet loc (Ploc.VaVal b) lpe e

<:expr< let $_flag:b$ $list:lpe$ in $e$ >>
MLast.ExLet loc b (Ploc.VaVal lpe) e

<:expr< let $_flag:b$ $_list:lpe$ in $e$ >>
MLast.ExLet loc b lpe e
- lowercase identifier
<:expr< $lid:s$ >>
MLast.ExLid loc (Ploc.VaVal s)

<:expr< $_lid:s$ >>
MLast.ExLid loc s
- let module
<:expr< let module $uid:s$ = $me$ in $e$ >>
MLast.ExLmd loc (Ploc.VaVal s) me e

<:expr< let module $_uid:s$ = $me$ in $e$ >>
MLast.ExLmd loc s me e
- match
<:expr< match $e$ with [ $list:lpee$ ] >>
MLast.ExMat loc e (Ploc.VaVal lpee)

<:expr< match $e$ with [ $_list:lpee$ ] >>
MLast.ExMat loc e lpee
- new
<:expr< new $list:ls$ >>
MLast.ExNew loc (Ploc.VaVal ls)

<:expr< new $_list:ls$ >>
MLast.ExNew loc ls
- object expression
<:expr< object $list:lcsi$ end >>
MLast.ExObj loc (Ploc.VaVal None) (Ploc.VaVal lcsi)

<:expr< object $_list:lcsi$ end >>
MLast.ExObj loc (Ploc.VaVal None) lcsi

<:expr< object ($p$) $list:lcsi$ end >>
MLast.ExObj loc (Ploc.VaVal (Some p)) (Ploc.VaVal lcsi)

<:expr< object ($p$) $_list:lcsi$ end >>
MLast.ExObj loc (Ploc.VaVal (Some p)) lcsi

<:expr< object $opt:op$ $list:lcsi$ end >>
MLast.ExObj loc (Ploc.VaVal op) (Ploc.VaVal lcsi)

<:expr< object $opt:op$ $_list:lcsi$ end >>
MLast.ExObj loc (Ploc.VaVal op) lcsi

<:expr< object $_opt:op$ $list:lcsi$ end >>
MLast.ExObj loc op (Ploc.VaVal lcsi)

<:expr< object $_opt:op$ $_list:lcsi$ end >>
MLast.ExObj loc op lcsi
- option label
<:expr< ?{$p$} >>
MLast.ExOlb loc p (Ploc.VaVal None)

<:expr< ?{$p$ = $e$} >>
MLast.ExOlb loc p (Ploc.VaVal (Some e))

<:expr< ?{$p$ $opt:oe$} >>
MLast.ExOlb loc p (Ploc.VaVal oe)

<:expr< ?{$p$ $_opt:oe$} >>
MLast.ExOlb loc p oe
- override
<:expr< {< $list:lse$ >} >>
MLast.ExOvr loc (Ploc.VaVal lse)

<:expr< {< $_list:lse$ >} >>
MLast.ExOvr loc lse
- module packing
<:expr< (module $me$) >>
MLast.ExPck loc me None

<:expr< (module $me$ : $mt$) >>
MLast.ExPck loc me (Some mt)
- record
<:expr< {$list:lpe$} >>
MLast.ExRec loc (Ploc.VaVal lpe) None

<:expr< {($e$) with $list:lpe$} >>
MLast.ExRec loc (Ploc.VaVal lpe) (Some e)

<:expr< {$_list:lpe$} >>
MLast.ExRec loc lpe None

<:expr< {($e$) with $_list:lpe$} >>
MLast.ExRec loc lpe (Some e)
- sequence
<:expr< do { $list:le$ } >>
MLast.ExSeq loc (Ploc.VaVal le)

<:expr< do { $_list:le$ } >>
MLast.ExSeq loc le
- method call
<:expr< $e$ # $s$ >>
MLast.ExSnd loc e (Ploc.VaVal s)

<:expr< $e$ # $_:s$ >>
MLast.ExSnd loc e s
- string element
<:expr< $e1$ .[ $e2$ ] >>
MLast.ExSte loc e1 e2
- string
<:expr< $str:s$ >>
MLast.ExStr loc (Ploc.VaVal s)

<:expr< $_str:s$ >>
MLast.ExStr loc s
- try
<:expr< try $e$ with [ $list:lpee$ ] >>
MLast.ExTry loc e (Ploc.VaVal lpee)

<:expr< try $e$ with [ $_list:lpee$ ] >>
MLast.ExTry loc e lpee
- t-uple
<:expr< ($list:le$) >>
MLast.ExTup loc (Ploc.VaVal le)

<:expr< ($_list:le$) >>
MLast.ExTup loc le
- type constraint
<:expr< ($e$ : $t$) >>
MLast.ExTyc loc e t
- uppercase identifier
<:expr< $uid:s$ >>
MLast.ExUid loc (Ploc.VaVal s)

<:expr< $_uid:s$ >>
MLast.ExUid loc s
- variant
<:expr< ` $s$ >>
MLast.ExVrn loc (Ploc.VaVal s)

<:expr< ` $_:s$ >>
MLast.ExVrn loc s
- while
<:expr< while $e$ do { $list:le$ } >>
MLast.ExWhi loc e (Ploc.VaVal le)

<:expr< while $e$ do { $_list:le$ } >>
MLast.ExWhi loc e le
- extra node (2)
... no representation ...
MLast.ExXtr loc s oe
(1)

Node used in the quotation expanders to tells at conversion to OCaml compiler syntax tree time, that all locations of the sub-tree is correcty located in the quotation. By default, in quotations, the locations of all generated nodes are the location of the whole quotation. This node allows to make an exception to this rule, since we know that the antiquotation belongs to the universe of the enclosing program. See the chapter about quotations and, in particular, its section about antiquotations.

(2)

Extra node internally used by the quotation kit "q_ast.cmo" to build antiquotations of expressions.

patt

Patterns of the language.

- access
<:patt< $p1$ . $p2$ >>
MLast.PaAcc loc p1 p2
- alias
<:patt< ($p1$ as $p2$) >>
MLast.PaAli loc p1 p2
- antiquotation (1)
<:patt< $anti:p$ >>
MLast.PaAnt loc p
- wildcard
<:patt< _ >>
MLast.PaAny loc
- application
<:patt< $p1$ $p2$ >>
MLast.PaApp loc p1 p2
- array
<:patt< [| $list:lp$ |] >>
MLast.PaArr loc (Ploc.VaVal lp)

<:patt< [| $_list:lp$ |] >>
MLast.PaArr loc lp
- character
<:patt< $chr:s$ >>
MLast.PaChr loc (Ploc.VaVal s)

<:patt< $_chr:s$ >>
MLast.PaChr loc s
- float
<:patt< $flo:s$ >>
MLast.PaFlo loc (Ploc.VaVal s)

<:patt< $_flo:s$ >>
MLast.PaFlo loc s
- integer constant
<:patt< $int:s1$ >>
MLast.PaInt loc (Ploc.VaVal s1) ""

<:patt< $_int:s1$ >>
MLast.PaInt loc s1 ""
- integer 32 bits
<:patt< $int32:s1$ >>
MLast.PaInt loc (Ploc.VaVal s1) "l"

<:patt< $_int32:s1$ >>
MLast.PaInt loc s1 "l"
- integer 64 bits
<:patt< $int64:s1$ >>
MLast.PaInt loc (Ploc.VaVal s1) "L"

<:patt< $_int64:s1$ >>
MLast.PaInt loc s1 "L"
- native integer
<:patt< $nativeint:s1$ >>
MLast.PaInt loc (Ploc.VaVal s1) "n"

<:patt< $_nativeint:s1$ >>
MLast.PaInt loc s1 "n"
- label
<:patt< ~{$p1$} >>
MLast.PaLab loc p1 (Ploc.VaVal None)

<:patt< ~{$p1$ = $p2$} >>
MLast.PaLab loc p1 (Ploc.VaVal (Some p2))

<:patt< ~{$p1$ $opt:op2$} >>
MLast.PaLab loc p1 (Ploc.VaVal op2)

<:patt< ~{$p1$ $_opt:op2$} >>
MLast.PaLab loc p1 op2
- lazy
<:patt< lazy $p$ >>
MLast.PaLaz loc p
- lowercase identifier
<:patt< $lid:s$ >>
MLast.PaLid loc (Ploc.VaVal s)

<:patt< $_lid:s$ >>
MLast.PaLid loc s
- new type
<:patt< (type $lid:s$) >>
MLast.PaNty loc (Ploc.VaVal s)

<:patt< (type $_lid:s$) >>
MLast.PaNty loc s
- option label
<:patt< ?{$p$} >>
MLast.PaOlb loc p (Ploc.VaVal None)

<:patt< ?{$p$ = $e$} >>
MLast.PaOlb loc p (Ploc.VaVal (Some e))

<:patt< ?{$p$ $opt:oe$} >>
MLast.PaOlb loc p (Ploc.VaVal oe)

<:patt< ?{$p$ $_opt:oe$} >>
MLast.PaOlb loc p oe
- or
<:patt< $p1$ | $p2$ >>
MLast.PaOrp loc p1 p2
- record
<:patt< { $list:lpp$ } >>
MLast.PaRec loc (Ploc.VaVal lpp)

<:patt< { $_list:lpp$ } >>
MLast.PaRec loc lpp
- range
<:patt< $p1$ .. $p2$ >>
MLast.PaRng loc p1 p2
- string
<:patt< $str:s$ >>
MLast.PaStr loc (Ploc.VaVal s)

<:patt< $_str:s$ >>
MLast.PaStr loc s
- t-uple
<:patt< ($list:lp$) >>
MLast.PaTup loc (Ploc.VaVal lp)

<:patt< ($_list:lp$) >>
MLast.PaTup loc lp
- type constraint
<:patt< ($p$ : $t$) >>
MLast.PaTyc loc p t
- type pattern
<:patt< # $list:ls$ >>
MLast.PaTyp loc (Ploc.VaVal ls)

<:patt< # $_list:ls$ >>
MLast.PaTyp loc ls
- uppercase identifier
<:patt< $uid:s$ >>
MLast.PaUid loc (Ploc.VaVal s)

<:patt< $_uid:s$ >>
MLast.PaUid loc s
- module unpacking
<:patt< (module $uid:s$) >>
MLast.PaUnp loc (Ploc.VaVal s) None

<:patt< (module $uid:s$ : $mt$) >>
MLast.PaUnp loc (Ploc.VaVal s) (Some mt)

<:patt< (module $_uid:s$) >>
MLast.PaUnp loc s None

<:patt< (module $_uid:s$ : $mt$) >>
MLast.PaUnp loc s (Some mt)
- variant
<:patt< ` $s$ >>
MLast.PaVrn loc (Ploc.VaVal s)

<:patt< ` $_:s$ >>
MLast.PaVrn loc s
- extra node (2)
... no representation ...
MLast.PaXtr loc s op
(1) Node used to specify an antiquotation area, like for the equivalent node in expressions. See above.
(2) Extra node internally used by the quotation kit "q_ast.cmo" to build antiquotations of patterns.

ctyp

Type expressions of the language.

- access
<:ctyp< $t1$ . $t2$ >>
MLast.TyAcc loc t1 t2
- alias
<:ctyp< $t1$ as $t2$ >>
MLast.TyAli loc t1 t2
- wildcard
<:ctyp< _ >>
MLast.TyAny loc
- application
<:ctyp< $t1$ $t2$ >>
MLast.TyApp loc t1 t2
- arrow
<:ctyp< $t1$ -> $t2$ >>
MLast.TyArr loc t1 t2
- class
<:ctyp< # $list:ls$ >>
MLast.TyCls loc (Ploc.VaVal ls)

<:ctyp< # $_list:ls$ >>
MLast.TyCls loc ls
- label
<:ctyp< ~$s$: $t$ >>
MLast.TyLab loc (Ploc.VaVal s) t

<:ctyp< ~$_:s$: $t$ >>
MLast.TyLab loc s t
- lowercase identifier
<:ctyp< $lid:s$ >>
MLast.TyLid loc (Ploc.VaVal s)

<:ctyp< $_lid:s$ >>
MLast.TyLid loc s
- manifest
<:ctyp< $t1$ == private $t2$ >>
MLast.TyMan loc t1 (Ploc.VaVal True) t2

<:ctyp< $t1$ == $t2$ >>
MLast.TyMan loc t1 (Ploc.VaVal False) t2

<:ctyp< $t1$ == $priv:b$ $t2$ >>
MLast.TyMan loc t1 (Ploc.VaVal b) t2

<:ctyp< $t1$ == $_priv:b$ $t2$ >>
MLast.TyMan loc t1 b t2
- object
<:ctyp< < $list:lst$ .. > >>
MLast.TyObj loc (Ploc.VaVal lst) (Ploc.VaVal True)

<:ctyp< < $list:lst$ > >>
MLast.TyObj loc (Ploc.VaVal lst) (Ploc.VaVal False)

<:ctyp< < $list:lst$ $flag:b$ > >>
MLast.TyObj loc (Ploc.VaVal lst) (Ploc.VaVal b)

<:ctyp< < $list:lst$ $_flag:b$ > >>
MLast.TyObj loc (Ploc.VaVal lst) b

<:ctyp< < $_list:lst$ .. > >>
MLast.TyObj loc lst (Ploc.VaVal True)

<:ctyp< < $_list:lst$ > >>
MLast.TyObj loc lst (Ploc.VaVal False)

<:ctyp< < $_list:lst$ $flag:b$ > >>
MLast.TyObj loc lst (Ploc.VaVal b)

<:ctyp< < $_list:lst$ $_flag:b$ > >>
MLast.TyObj loc lst b
- option label
<:ctyp< ?$s$: $t$ >>
MLast.TyOlb loc (Ploc.VaVal s) t

<:ctyp< ?$_:s$: $t$ >>
MLast.TyOlb loc s t
- package
<:ctyp< (module $mt$) >>
MLast.TyPck loc mt
- polymorph
<:ctyp< ! $list:ls$ . $t$ >>
MLast.TyPol loc (Ploc.VaVal ls) t

<:ctyp< ! $_list:ls$ . $t$ >>
MLast.TyPol loc ls t
- variable
<:ctyp< '$s$ >>
MLast.TyQuo loc (Ploc.VaVal s)

<:ctyp< '$_:s$ >>
MLast.TyQuo loc s
- record
<:ctyp< { $list:llsbt$ } >>
MLast.TyRec loc (Ploc.VaVal llsbt)

<:ctyp< { $_list:llsbt$ } >>
MLast.TyRec loc llsbt
- sum
<:ctyp< [ $list:llslt$ ] >>
MLast.TySum loc (Ploc.VaVal llslt)

<:ctyp< [ $_list:llslt$ ] >>
MLast.TySum loc llslt
- t-uple
<:ctyp< ( $list:lt$ ) >>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)

<:ctyp< (tt>
MLast.TyTup loc (Ploc.VaVal lt)