
pair alpha beta ::= Pair alpha beta ;

list item ::= Nil | Cons item (list item) ;

annExprM bindAnn nodeAnn

 ::= AVar name |

     ANum num |
     AConstr name |

     AAp (pair nodeAnn (annExprM bindAnn nodeAnn)) 
         (pair nodeAnn (annExprM bindAnn nodeAnn)) |

     ALet bool (list (pair bindAnn (pair nodeAnn (annExprM bindAnn nodeAnn))))
          (pair nodeAnn (annExprM bindAnn nodeAnn))  |

     ACase (pair nodeAnn (annExprM bindAnn nodeAnn)) 
           (list (pair name (pair (list bindAnn) 
                  (pair nodeAnn (annExprM bindAnn nodeAnn))))) |

     ALam (list bindAnn) (pair nodeAnn (annExprM bindAnn nodeAnn)) ;

;;

main = 42


