hamlet/PPGrammar-struct.ss
(module PPGrammar-struct (planet chongkai/sml)
  (#%module-begin
   (Program:
    (STRDECTopDec:
     (STRUCTUREStrDec:
      (StrBind:
       (StrId: PPGrammar-struct)
       (COLONStrExp:
        (STRUCTStrExp:
         (SEQStrDec:
          (DECStrDec: (OPENDec: (LongStrId: TextIO-struct)))
          (SEQStrDec:
           (DECStrDec:
            (VALDec:
             (TyVarseq:)
             (RECValBind:
              (PLAINValBind:
               (ATPat: (IDAtPat: (LongVId: ppIndent)))
               (FNExp:
                (Match:
                 (Mrule:
                  (ATPat:
                   (PARAtPat:
                    (ATPat:
                     (RECORDAtPat:
                      (FIELDPatRow: (Lab: |1|) (ATPat: (IDAtPat: (LongVId: out))) (FIELDPatRow: (Lab: |2|) (ATPat: (IDAtPat: (LongVId: i)))))))))
                  (ATExp:
                   (PARAtExp:
                    (APPExp:
                     (ATExp: (IDAtExp: (LongVId: output)))
                     (RECORDAtExp:
                      (ExpRow:
                       (Lab: |1|)
                       (ATExp: (IDAtExp: (LongVId: out)))
                       (ExpRow:
                        (Lab: |2|)
                        (ATExp:
                         (PARAtExp:
                          (APPExp:
                           (ATExp: (IDAtExp: (LongVId: CharVector.tabulate)))
                           (RECORDAtExp:
                            (ExpRow:
                             (Lab: |1|)
                             (ATExp:
                              (PARAtExp:
                               (APPExp:
                                (ATExp: (IDAtExp: (LongVId: *)))
                                (RECORDAtExp:
                                 (ExpRow: (Lab: |1|) (ATExp: (SCONAtExp: (INTSCon: 2))) (ExpRow: (Lab: |2|) (ATExp: (IDAtExp: (LongVId: i)))))))))
                             (ExpRow:
                              (Lab: |2|)
                              (FNExp: (Match: (Mrule: (ATPat: (WILDCARDAtPat:)) (ATExp: (SCONAtExp: (CHARSCon: #\space)))))))))))))))))))))))))
           (SEQStrDec:
            (DECStrDec:
             (VALDec:
              (TyVarseq:)
              (RECValBind:
               (PLAINValBind:
                (ATPat: (IDAtPat: (LongVId: ppBegin)))
                (FNExp:
                 (Match:
                  (Mrule:
                   (ATPat: (PARAtPat: (ATPat: (IDAtPat: (LongVId: out)))))
                   (ATExp:
                    (PARAtExp:
                     (APPExp:
                      (ATExp: (IDAtExp: (LongVId: output)))
                      (RECORDAtExp:
                       (ExpRow: (Lab: |1|) (ATExp: (IDAtExp: (LongVId: out))) (ExpRow: (Lab: |2|) (ATExp: (SCONAtExp: (STRINGSCon: "("))))))))))))))))
            (SEQStrDec:
             (DECStrDec:
              (VALDec:
               (TyVarseq:)
               (RECValBind:
                (PLAINValBind:
                 (ATPat: (IDAtPat: (LongVId: ppEnd)))
                 (FNExp:
                  (Match:
                   (Mrule:
                    (ATPat: (PARAtPat: (ATPat: (IDAtPat: (LongVId: out)))))
                    (ATExp:
                     (PARAtExp:
                      (APPExp:
                       (ATExp: (IDAtExp: (LongVId: output)))
                       (RECORDAtExp:
                        (ExpRow: (Lab: |1|) (ATExp: (IDAtExp: (LongVId: out))) (ExpRow: (Lab: |2|) (ATExp: (SCONAtExp: (STRINGSCon: ")"))))))))))))))))
             (SEQStrDec:
              (DECStrDec:
               (VALDec:
                (TyVarseq:)
                (RECValBind:
                 (PLAINValBind:
                  (ATPat: (IDAtPat: (LongVId: ppPos)))
                  (FNExp:
                   (Match:
                    (Mrule:
                     (ATPat:
                      (PARAtPat:
                       (ATPat:
                        (RECORDAtPat:
                         (FIELDPatRow:
                          (Lab: |1|)
                          (ATPat: (IDAtPat: (LongVId: out)))
                          (FIELDPatRow:
                           (Lab: |2|)
                           (ATPat:
                            (RECORDAtPat:
                             (FIELDPatRow:
                              (Lab: abs)
                              (ATPat: (IDAtPat: (LongVId: abs)))
                              (FIELDPatRow:
                               (Lab: lin)
                               (ATPat: (IDAtPat: (LongVId: lin)))
                               (FIELDPatRow: (Lab: col) (ATPat: (IDAtPat: (LongVId: col))))))))))))))
                     (ATExp:
                      (SEQAtExp:
                       (ATExp:
                        (PARAtExp:
                         (APPExp:
                          (ATExp: (IDAtExp: (LongVId: output)))
                          (RECORDAtExp:
                           (ExpRow:
                            (Lab: |1|)
                            (ATExp: (IDAtExp: (LongVId: out)))
                            (ExpRow: (Lab: |2|) (ATExp: (PARAtExp: (APPExp: (ATExp: (IDAtExp: (LongVId: Int.toString))) (IDAtExp: (LongVId: abs)))))))))))
                       (SEQAtExp:
                        (ATExp:
                         (PARAtExp:
                          (APPExp:
                           (ATExp: (IDAtExp: (LongVId: output)))
                           (RECORDAtExp:
                            (ExpRow: (Lab: |1|) (ATExp: (IDAtExp: (LongVId: out))) (ExpRow: (Lab: |2|) (ATExp: (SCONAtExp: (STRINGSCon: "(")))))))))
                        (SEQAtExp:
                         (ATExp:
                          (PARAtExp:
                           (APPExp:
                            (ATExp: (IDAtExp: (LongVId: output)))
                            (RECORDAtExp:
                             (ExpRow:
                              (Lab: |1|)
                              (ATExp: (IDAtExp: (LongVId: out)))
                              (ExpRow: (Lab: |2|) (ATExp: (PARAtExp: (APPExp: (ATExp: (IDAtExp: (LongVId: Int.toString))) (IDAtExp: (LongVId: lin)))))))))))
                         (SEQAtExp:
                          (ATExp:
                           (PARAtExp:
                            (APPExp:
                             (ATExp: (IDAtExp: (LongVId: output)))
                             (RECORDAtExp:
                              (ExpRow: (Lab: |1|) (ATExp: (IDAtExp: (LongVId: out))) (ExpRow: (Lab: |2|) (ATExp: (SCONAtExp: (STRINGSCon: ".")))))))))
                          (SEQAtExp:
                           (ATExp:
                            (PARAtExp:
                             (APPExp:
                              (ATExp: (IDAtExp: (LongVId: output)))
                              (RECORDAtExp:
                               (ExpRow:
                                (Lab: |1|)
                                (ATExp: (IDAtExp: (LongVId: out)))
                                (ExpRow:
                                 (Lab: |2|)
                                 (ATExp: (PARAtExp: (APPExp: (ATExp: (IDAtExp: (LongVId: Int.toString))) (IDAtExp: (LongVId: col)))))))))))
                           (PARAtExp:
                            (ATExp:
                             (PARAtExp:
                              (APPExp:
                               (ATExp: (IDAtExp: (LongVId: output)))
                               (RECORDAtExp:
                                (ExpRow:
                                 (Lab: |1|)
                                 (ATExp: (IDAtExp: (LongVId: out)))
                                 (ExpRow: (Lab: |2|) (ATExp: (SCONAtExp: (STRINGSCon: ")")))))))))))))))))))))))
              (SEQStrDec:
               (DECStrDec:
                (VALDec:
                 (TyVarseq:)
                 (RECValBind:
                  (PLAINValBind:
                   (ATPat: (IDAtPat: (LongVId: ppRegion)))
                   (FNExp:
                    (Match:
                     (Mrule:
                      (ATPat:
                       (PARAtPat:
                        (ATPat:
                         (RECORDAtPat:
                          (FIELDPatRow:
                           (Lab: |1|)
                           (ATPat: (IDAtPat: (LongVId: out)))
                           (FIELDPatRow:
                            (Lab: |2|)
                            (ATPat:
                             (RECORDAtPat:
                              (FIELDPatRow:
                               (Lab: left)
                               (ATPat: (IDAtPat: (LongVId: left)))
                               (FIELDPatRow: (Lab: right) (ATPat: (IDAtPat: (LongVId: right)))))))))))))
                      (ATExp:
                       (SEQAtExp:
                        (ATExp:
                         (PARAtExp:
                          (APPExp:
                           (ATExp: (IDAtExp: (LongVId: ppPos)))
                           (RECORDAtExp: (ExpRow: (Lab: |1|) (ATExp: (IDAtExp: (LongVId: out))) (ExpRow: (Lab: |2|) (ATExp: (IDAtExp: (LongVId: left)))))))))
                        (SEQAtExp:
                         (ATExp:
                          (PARAtExp:
                           (APPExp:
                            (ATExp: (IDAtExp: (LongVId: output)))
                            (RECORDAtExp:
                             (ExpRow: (Lab: |1|) (ATExp: (IDAtExp: (LongVId: out))) (ExpRow: (Lab: |2|) (ATExp: (SCONAtExp: (STRINGSCon: "-")))))))))
                         (PARAtExp:
                          (ATExp:
                           (PARAtExp:
                            (APPExp:
                             (ATExp: (IDAtExp: (LongVId: ppPos)))
                             (RECORDAtExp:
                              (ExpRow:
                               (Lab: |1|)
                               (ATExp: (IDAtExp: (LongVId: out)))
                               (ExpRow: (Lab: |2|) (ATExp: (IDAtExp: (LongVId: right))))))))))))))))))))
               (SEQStrDec:
                (DECStrDec:
                 (VALDec:
                  (TyVarseq:)
                  (RECValBind:
                   (PLAINValBind:
                    (ATPat: (IDAtPat: (LongVId: ppInfo)))
                    (FNExp:
                     (Match:
                      (Mrule:
                       (ATPat:
                        (PARAtPat:
                         (ATPat:
                          (RECORDAtPat:
                           (FIELDPatRow:
                            (Lab: |1|)
                            (ATPat: (IDAtPat: (LongVId: out)))
                            (FIELDPatRow:
                             (Lab: |2|)
                             (ATPat:
                              (RECORDAtPat:
                               (FIELDPatRow:
                                (Lab: file)
                                (ATPat: (IDAtPat: (LongVId: file)))
                                (FIELDPatRow: (Lab: region) (ATPat: (IDAtPat: (LongVId: region)))))))))))))
                       (ATExp:
                        (SEQAtExp:
                         (APPExp:
                          (ATExp:
                           (PARAtExp:
                            (FNExp:
                             (Match:
                              (Mrule: (ATPat: (IDAtPat: (LongVId: NONE))) (ATExp: (RECORDAtExp:)))
                              (Match:
                               (Mrule:
                                (ATPat: (PARAtPat: (CONPat: (LongVId: SOME) (IDAtPat: (LongVId: f)))))
                                (ATExp:
                                 (SEQAtExp:
                                  (ATExp:
                                   (PARAtExp:
                                    (APPExp:
                                     (ATExp: (IDAtExp: (LongVId: output)))
                                     (RECORDAtExp:
                                      (ExpRow: (Lab: |1|) (ATExp: (IDAtExp: (LongVId: out))) (ExpRow: (Lab: |2|) (ATExp: (IDAtExp: (LongVId: f)))))))))
                                  (PARAtExp:
                                   (ATExp:
                                    (PARAtExp:
                                     (APPExp:
                                      (ATExp: (IDAtExp: (LongVId: output)))
                                      (RECORDAtExp:
                                       (ExpRow:
                                        (Lab: |1|)
                                        (ATExp: (IDAtExp: (LongVId: out)))
                                        (ExpRow: (Lab: |2|) (ATExp: (SCONAtExp: (STRINGSCon: ":"))))))))))))))))))
                          (PARAtExp: (ATExp: (IDAtExp: (LongVId: file)))))
                         (PARAtExp:
                          (ATExp:
                           (PARAtExp:
                            (APPExp:
                             (ATExp: (IDAtExp: (LongVId: ppRegion)))
                             (RECORDAtExp:
                              (ExpRow:
                               (Lab: |1|)
                               (ATExp: (IDAtExp: (LongVId: out)))
                               (ExpRow: (Lab: |2|) (ATExp: (IDAtExp: (LongVId: region)))))))))))))))))))
                (SEQStrDec:
                 (DECStrDec:
                  (VALDec:
                   (TyVarseq:)
                   (RECValBind:
                    (PLAINValBind:
                     (ATPat: (IDAtPat: (LongVId: |ppHead'|)))
                     (FNExp:
                      (Match:
                       (Mrule:
                        (ATPat:
                         (PARAtPat:
                          (ATPat:
                           (RECORDAtPat:
                            (FIELDPatRow:
                             (Lab: |1|)
                             (ATPat: (IDAtPat: (LongVId: out)))
                             (FIELDPatRow:
                              (Lab: |2|)
                              (ATPat: (IDAtPat: (LongVId: i)))
                              (FIELDPatRow: (Lab: |3|) (ATPat: (IDAtPat: (LongVId: s))) (FIELDPatRow: (Lab: |4|) (ATPat: (IDAtPat: (LongVId: I)))))))))))
                        (ATExp:
                         (SEQAtExp:
                          (ATExp:
                           (PARAtExp:
                            (APPExp:
                             (ATExp: (IDAtExp: (LongVId: ppIndent)))
                             (RECORDAtExp: (ExpRow: (Lab: |1|) (ATExp: (IDAtExp: (LongVId: out))) (ExpRow: (Lab: |2|) (ATExp: (IDAtExp: (LongVId: i)))))))))
                          (SEQAtExp:
                           (ATExp: (PARAtExp: (APPExp: (ATExp: (IDAtExp: (LongVId: ppBegin))) (IDAtExp: (LongVId: out)))))
                           (SEQAtExp:
                            (ATExp:
                             (PARAtExp:
                              (APPExp:
                               (ATExp: (IDAtExp: (LongVId: output)))
                               (RECORDAtExp:
                                (ExpRow: (Lab: |1|) (ATExp: (IDAtExp: (LongVId: out))) (ExpRow: (Lab: |2|) (ATExp: (IDAtExp: (LongVId: s)))))))))
                            (SEQAtExp:
                             (ATExp:
                              (PARAtExp:
                               (APPExp:
                                (ATExp: (IDAtExp: (LongVId: output)))
                                (RECORDAtExp:
                                 (ExpRow: (Lab: |1|) (ATExp: (IDAtExp: (LongVId: out))) (ExpRow: (Lab: |2|) (ATExp: (SCONAtExp: (STRINGSCon: " ")))))))))
                             (PARAtExp:
                              (ATExp:
                               (PARAtExp:
                                (APPExp:
                                 (ATExp: (IDAtExp: (LongVId: ppInfo)))
                                 (RECORDAtExp:
                                  (ExpRow:
                                   (Lab: |1|)
                                   (ATExp: (IDAtExp: (LongVId: out)))
                                   (ExpRow: (Lab: |2|) (ATExp: (IDAtExp: (LongVId: I))))))))))))))))))))))
                 (SEQStrDec:
                  (DECStrDec:
                   (VALDec:
                    (TyVarseq:)
                    (RECValBind:
                     (PLAINValBind:
                      (ATPat: (IDAtPat: (LongVId: |ppFoot'|)))
                      (FNExp:
                       (Match:
                        (Mrule:
                         (ATPat:
                          (PARAtPat:
                           (ATPat:
                            (RECORDAtPat:
                             (FIELDPatRow:
                              (Lab: |1|)
                              (ATPat: (IDAtPat: (LongVId: out)))
                              (FIELDPatRow: (Lab: |2|) (ATPat: (IDAtPat: (LongVId: i))) (FIELDPatRow: (Lab: |3|) (ATPat: (IDAtPat: (LongVId: I))))))))))
                         (ATExp:
                          (SEQAtExp:
                           (ATExp: (PARAtExp: (APPExp: (ATExp: (IDAtExp: (LongVId: ppEnd))) (IDAtExp: (LongVId: out)))))
                           (PARAtExp:
                            (ATExp:
                             (PARAtExp:
                              (APPExp:
                               (ATExp: (IDAtExp: (LongVId: output)))
                               (RECORDAtExp:
                                (ExpRow:
                                 (Lab: |1|)
                                 (ATExp: (IDAtExp: (LongVId: out)))
                                 (ExpRow: (Lab: |2|) (ATExp: (SCONAtExp: (STRINGSCon: "\n")))))))))))))))))))
                  (SEQStrDec:
                   (DECStrDec:
                    (VALDec:
                     (TyVarseq:)
                     (RECValBind:
                      (PLAINValBind:
                       (ATPat: (IDAtPat: (LongVId: ppHead)))
                       (FNExp:
                        (Match:
                         (Mrule:
                          (ATPat:
                           (PARAtPat:
                            (ATPat:
                             (RECORDAtPat:
                              (FIELDPatRow:
                               (Lab: |1|)
                               (ATPat: (IDAtPat: (LongVId: out)))
                               (FIELDPatRow:
                                (Lab: |2|)
                                (ATPat: (IDAtPat: (LongVId: i)))
                                (FIELDPatRow: (Lab: |3|) (ATPat: (IDAtPat: (LongVId: s))) (FIELDPatRow: (Lab: |4|) (ATPat: (IDAtPat: (LongVId: I)))))))))))
                          (ATExp:
                           (SEQAtExp:
                            (ATExp:
                             (PARAtExp:
                              (APPExp:
                               (ATExp: (IDAtExp: (LongVId: |ppHead'|)))
                               (RECORDAtExp:
                                (ExpRow:
                                 (Lab: |1|)
                                 (ATExp: (IDAtExp: (LongVId: out)))
                                 (ExpRow:
                                  (Lab: |2|)
                                  (ATExp: (IDAtExp: (LongVId: i)))
                                  (ExpRow: (Lab: |3|) (ATExp: (IDAtExp: (LongVId: s))) (ExpRow: (Lab: |4|) (ATExp: (IDAtExp: (LongVId: I)))))))))))
                            (PARAtExp:
                             (ATExp:
                              (PARAtExp:
                               (APPExp:
                                (ATExp: (IDAtExp: (LongVId: output)))
                                (RECORDAtExp:
                                 (ExpRow:
                                  (Lab: |1|)
                                  (ATExp: (IDAtExp: (LongVId: out)))
                                  (ExpRow: (Lab: |2|) (ATExp: (SCONAtExp: (STRINGSCon: "\n")))))))))))))))))))
                   (SEQStrDec:
                    (DECStrDec:
                     (VALDec:
                      (TyVarseq:)
                      (RECValBind:
                       (PLAINValBind:
                        (ATPat: (IDAtPat: (LongVId: ppFoot)))
                        (FNExp:
                         (Match:
                          (Mrule:
                           (ATPat:
                            (PARAtPat:
                             (ATPat:
                              (RECORDAtPat:
                               (FIELDPatRow:
                                (Lab: |1|)
                                (ATPat: (IDAtPat: (LongVId: out)))
                                (FIELDPatRow: (Lab: |2|) (ATPat: (IDAtPat: (LongVId: i))) (FIELDPatRow: (Lab: |3|) (ATPat: (IDAtPat: (LongVId: I))))))))))
                           (ATExp:
                            (SEQAtExp:
                             (ATExp:
                              (PARAtExp:
                               (APPExp:
                                (ATExp: (IDAtExp: (LongVId: ppIndent)))
                                (RECORDAtExp:
                                 (ExpRow: (Lab: |1|) (ATExp: (IDAtExp: (LongVId: out))) (ExpRow: (Lab: |2|) (ATExp: (IDAtExp: (LongVId: i)))))))))
                             (PARAtExp:
                              (ATExp:
                               (PARAtExp:
                                (APPExp:
                                 (ATExp: (IDAtExp: (LongVId: |ppFoot'|)))
                                 (RECORDAtExp:
                                  (ExpRow:
                                   (Lab: |1|)
                                   (ATExp: (IDAtExp: (LongVId: out)))
                                   (ExpRow:
                                    (Lab: |2|)
                                    (ATExp: (IDAtExp: (LongVId: i)))
                                    (ExpRow:
                                     (Lab: |3|)
                                     (ATExp: (PARAtExp: (APPExp: (ATExp: (IDAtExp: (LongVId: SOME))) (IDAtExp: (LongVId: I))))))))))))))))))))))
                    (SEQStrDec:
                     (DECStrDec:
                      (VALDec:
                       (TyVarseq:)
                       (RECValBind:
                        (PLAINValBind:
                         (ATPat: (IDAtPat: (LongVId: ppHeadFoot)))
                         (FNExp:
                          (Match:
                           (Mrule:
                            (ATPat:
                             (PARAtPat:
                              (ATPat:
                               (RECORDAtPat:
                                (FIELDPatRow:
                                 (Lab: |1|)
                                 (ATPat: (IDAtPat: (LongVId: out)))
                                 (FIELDPatRow:
                                  (Lab: |2|)
                                  (ATPat: (IDAtPat: (LongVId: i)))
                                  (FIELDPatRow: (Lab: |3|) (ATPat: (IDAtPat: (LongVId: s))) (FIELDPatRow: (Lab: |4|) (ATPat: (IDAtPat: (LongVId: I)))))))))))
                            (ATExp:
                             (SEQAtExp:
                              (ATExp:
                               (PARAtExp:
                                (APPExp:
                                 (ATExp: (IDAtExp: (LongVId: |ppHead'|)))
                                 (RECORDAtExp:
                                  (ExpRow:
                                   (Lab: |1|)
                                   (ATExp: (IDAtExp: (LongVId: out)))
                                   (ExpRow:
                                    (Lab: |2|)
                                    (ATExp: (IDAtExp: (LongVId: i)))
                                    (ExpRow: (Lab: |3|) (ATExp: (IDAtExp: (LongVId: s))) (ExpRow: (Lab: |4|) (ATExp: (IDAtExp: (LongVId: I)))))))))))
                              (PARAtExp:
                               (ATExp:
                                (PARAtExp:
                                 (APPExp:
                                  (ATExp: (IDAtExp: (LongVId: |ppFoot'|)))
                                  (RECORDAtExp:
                                   (ExpRow:
                                    (Lab: |1|)
                                    (ATExp: (IDAtExp: (LongVId: out)))
                                    (ExpRow:
                                     (Lab: |2|)
                                     (ATExp: (IDAtExp: (LongVId: i)))
                                     (ExpRow: (Lab: |3|) (ATExp: (IDAtExp: (LongVId: I))))))))))))))))))))
                     (SEQStrDec:
                      (DECStrDec:
                       (VALDec:
                        (TyVarseq:)
                        (RECValBind:
                         (PLAINValBind:
                          (ATPat: (IDAtPat: (LongVId: ppAtom)))
                          (FNExp:
                           (Match:
                            (Mrule:
                             (ATPat:
                              (PARAtPat:
                               (ATPat:
                                (RECORDAtPat:
                                 (FIELDPatRow:
                                  (Lab: |1|)
                                  (ATPat: (IDAtPat: (LongVId: out)))
                                  (FIELDPatRow:
                                   (Lab: |2|)
                                   (ATPat: (IDAtPat: (LongVId: i)))
                                   (FIELDPatRow:
                                    (Lab: |3|)
                                    (ATPat: (IDAtPat: (LongVId: s1)))
                                    (FIELDPatRow:
                                     (Lab: |4|)
                                     (ATPat: (IDAtPat: (LongVId: I)))
                                     (FIELDPatRow: (Lab: |5|) (ATPat: (IDAtPat: (LongVId: s2))))))))))))
                             (ATExp:
                              (SEQAtExp:
                               (ATExp:
                                (PARAtExp:
                                 (APPExp:
                                  (ATExp: (IDAtExp: (LongVId: |ppHead'|)))
                                  (RECORDAtExp:
                                   (ExpRow:
                                    (Lab: |1|)
                                    (ATExp: (IDAtExp: (LongVId: out)))
                                    (ExpRow:
                                     (Lab: |2|)
                                     (ATExp: (IDAtExp: (LongVId: i)))
                                     (ExpRow: (Lab: |3|) (ATExp: (IDAtExp: (LongVId: s1))) (ExpRow: (Lab: |4|) (ATExp: (IDAtExp: (LongVId: I)))))))))))
                               (SEQAtExp:
                                (ATExp:
                                 (PARAtExp:
                                  (APPExp:
                                   (ATExp: (IDAtExp: (LongVId: output)))
                                   (RECORDAtExp:
                                    (ExpRow: (Lab: |1|) (ATExp: (IDAtExp: (LongVId: out))) (ExpRow: (Lab: |2|) (ATExp: (SCONAtExp: (STRINGSCon: " ")))))))))
                                (SEQAtExp:
                                 (ATExp:
                                  (PARAtExp:
                                   (APPExp:
                                    (ATExp: (IDAtExp: (LongVId: output)))
                                    (RECORDAtExp:
                                     (ExpRow: (Lab: |1|) (ATExp: (IDAtExp: (LongVId: out))) (ExpRow: (Lab: |2|) (ATExp: (IDAtExp: (LongVId: s2)))))))))
                                 (PARAtExp:
                                  (ATExp:
                                   (PARAtExp:
                                    (APPExp:
                                     (ATExp: (IDAtExp: (LongVId: |ppFoot'|)))
                                     (RECORDAtExp:
                                      (ExpRow:
                                       (Lab: |1|)
                                       (ATExp: (IDAtExp: (LongVId: out)))
                                       (ExpRow:
                                        (Lab: |2|)
                                        (ATExp: (IDAtExp: (LongVId: i)))
                                        (ExpRow: (Lab: |3|) (ATExp: (IDAtExp: (LongVId: I))))))))))))))))))))))
                      (SEQStrDec:
                       (DECStrDec:
                        (VALDec:
                         (TyVarseq:)
                         (RECValBind:
                          (PLAINValBind:
                           (ATPat: (IDAtPat: (LongVId: ppElem)))
                           (FNExp:
                            (Match:
                             (Mrule:
                              (ATPat:
                               (PARAtPat:
                                (ATPat:
                                 (RECORDAtPat:
                                  (FIELDPatRow:
                                   (Lab: |1|)
                                   (ATPat: (IDAtPat: (LongVId: out)))
                                   (FIELDPatRow:
                                    (Lab: |2|)
                                    (ATPat: (IDAtPat: (LongVId: i)))
                                    (FIELDPatRow:
                                     (Lab: |3|)
                                     (ATPat: (IDAtPat: (LongVId: s)))
                                     (FIELDPatRow:
                                      (Lab: |4|)
                                      (ATPat: (IDAtPat: (LongVId: I)))
                                      (FIELDPatRow: (Lab: |5|) (ATPat: (IDAtPat: (LongVId: nil))))))))))))
                              (ATExp:
                               (PARAtExp:
                                (APPExp:
                                 (ATExp: (IDAtExp: (LongVId: ppHeadFoot)))
                                 (RECORDAtExp:
                                  (ExpRow:
                                   (Lab: |1|)
                                   (ATExp: (IDAtExp: (LongVId: out)))
                                   (ExpRow:
                                    (Lab: |2|)
                                    (ATExp: (IDAtExp: (LongVId: i)))
                                    (ExpRow: (Lab: |3|) (ATExp: (IDAtExp: (LongVId: s))) (ExpRow: (Lab: |4|) (ATExp: (IDAtExp: (LongVId: I))))))))))))
                             (Match:
                              (Mrule:
                               (ATPat:
                                (PARAtPat:
                                 (ATPat:
                                  (RECORDAtPat:
                                   (FIELDPatRow:
                                    (Lab: |1|)
                                    (ATPat: (IDAtPat: (LongVId: out)))
                                    (FIELDPatRow:
                                     (Lab: |2|)
                                     (ATPat: (IDAtPat: (LongVId: i)))
                                     (FIELDPatRow:
                                      (Lab: |3|)
                                      (ATPat: (IDAtPat: (LongVId: s)))
                                      (FIELDPatRow:
                                       (Lab: |4|)
                                       (ATPat: (IDAtPat: (LongVId: I)))
                                       (FIELDPatRow: (Lab: |5|) (ATPat: (IDAtPat: (LongVId: subs))))))))))))
                               (ATExp:
                                (SEQAtExp:
                                 (ATExp:
                                  (PARAtExp:
                                   (APPExp:
                                    (ATExp: (IDAtExp: (LongVId: ppHead)))
                                    (RECORDAtExp:
                                     (ExpRow:
                                      (Lab: |1|)
                                      (ATExp: (IDAtExp: (LongVId: out)))
                                      (ExpRow:
                                       (Lab: |2|)
                                       (ATExp: (IDAtExp: (LongVId: i)))
                                       (ExpRow: (Lab: |3|) (ATExp: (IDAtExp: (LongVId: s))) (ExpRow: (Lab: |4|) (ATExp: (IDAtExp: (LongVId: I)))))))))))
                                 (SEQAtExp:
                                  (ATExp:
                                   (PARAtExp:
                                    (APPExp:
                                     (ATExp:
                                      (PARAtExp:
                                       (APPExp:
                                        (ATExp: (IDAtExp: (LongVId: List.app)))
                                        (PARAtExp:
                                         (FNExp:
                                          (Match:
                                           (Mrule:
                                            (ATPat: (IDAtPat: (LongVId: pp)))
                                            (ATExp:
                                             (PARAtExp:
                                              (APPExp:
                                               (ATExp: (IDAtExp: (LongVId: pp)))
                                               (RECORDAtExp:
                                                (ExpRow:
                                                 (Lab: |1|)
                                                 (ATExp: (IDAtExp: (LongVId: out)))
                                                 (ExpRow:
                                                  (Lab: |2|)
                                                  (ATExp:
                                                   (PARAtExp:
                                                    (APPExp:
                                                     (ATExp: (IDAtExp: (LongVId: +)))
                                                     (RECORDAtExp:
                                                      (ExpRow:
                                                       (Lab: |1|)
                                                       (ATExp: (IDAtExp: (LongVId: i)))
                                                       (ExpRow: (Lab: |2|) (ATExp: (SCONAtExp: (INTSCon: 1))))))))))))))))))))))
                                     (IDAtExp: (LongVId: subs)))))
                                  (PARAtExp:
                                   (ATExp:
                                    (PARAtExp:
                                     (APPExp:
                                      (ATExp: (IDAtExp: (LongVId: ppFoot)))
                                      (RECORDAtExp:
                                       (ExpRow:
                                        (Lab: |1|)
                                        (ATExp: (IDAtExp: (LongVId: out)))
                                        (ExpRow:
                                         (Lab: |2|)
                                         (ATExp: (IDAtExp: (LongVId: i)))
                                         (ExpRow: (Lab: |3|) (ATExp: (IDAtExp: (LongVId: I))))))))))))))))))))))
                       (SEQStrDec:
                        (DECStrDec:
                         (VALDec:
                          (TyVarseq:)
                          (RECValBind:
                           (PLAINValBind:
                            (ATPat: (IDAtPat: (LongVId: ppOpt)))
                            (FNExp:
                             (Match:
                              (Mrule:
                               (ATPat: (IDAtPat: (LongVId: _id94)))
                               (FNExp:
                                (Match:
                                 (Mrule:
                                  (ATPat: (IDAtPat: (LongVId: _id95)))
                                  (APPExp:
                                   (ATExp:
                                    (PARAtExp:
                                     (FNExp:
                                      (Match:
                                       (Mrule:
                                        (ATPat:
                                         (RECORDAtPat:
                                          (FIELDPatRow:
                                           (Lab: |1|)
                                           (ATPat: (IDAtPat: (LongVId: ppX)))
                                           (FIELDPatRow:
                                            (Lab: |2|)
                                            (ATPat:
                                             (RECORDAtPat:
                                              (FIELDPatRow:
                                               (Lab: |1|)
                                               (ATPat: (IDAtPat: (LongVId: out)))
                                               (FIELDPatRow:
                                                (Lab: |2|)
                                                (ATPat: (IDAtPat: (LongVId: i)))
                                                (FIELDPatRow: (Lab: |3|) (ATPat: (IDAtPat: (LongVId: NONE))))))))))))
                                        (ATExp: (RECORDAtExp:)))
                                       (Match:
                                        (Mrule:
                                         (ATPat:
                                          (RECORDAtPat:
                                           (FIELDPatRow:
                                            (Lab: |1|)
                                            (ATPat: (IDAtPat: (LongVId: ppX)))
                                            (FIELDPatRow:
                                             (Lab: |2|)
                                             (ATPat:
                                              (RECORDAtPat:
                                               (FIELDPatRow:
                                                (Lab: |1|)
                                                (ATPat: (IDAtPat: (LongVId: out)))
                                                (FIELDPatRow:
                                                 (Lab: |2|)
                                                 (ATPat: (IDAtPat: (LongVId: i)))
                                                 (FIELDPatRow: (Lab: |3|) (ATPat: (PARAtPat: (CONPat: (LongVId: SOME) (IDAtPat: (LongVId: x))))))))))))))
                                         (ATExp:
                                          (PARAtExp:
                                           (APPExp:
                                            (ATExp: (IDAtExp: (LongVId: ppX)))
                                            (RECORDAtExp:
                                             (ExpRow:
                                              (Lab: |1|)
                                              (ATExp: (IDAtExp: (LongVId: out)))
                                              (ExpRow:
                                               (Lab: |2|)
                                               (ATExp: (IDAtExp: (LongVId: i)))
                                               (ExpRow: (Lab: |3|) (ATExp: (IDAtExp: (LongVId: x))))))))))))))))
                                   (PARAtExp:
                                    (ATExp:
                                     (RECORDAtExp:
                                      (ExpRow:
                                       (Lab: |1|)
                                       (ATExp: (IDAtExp: (LongVId: _id94)))
                                       (ExpRow: (Lab: |2|) (ATExp: (IDAtExp: (LongVId: _id95)))))))))))))))))))
                        (SEQStrDec:
                         (DECStrDec:
                          (VALDec:
                           (TyVarseq:)
                           (RECValBind:
                            (PLAINValBind:
                             (ATPat: (IDAtPat: (LongVId: sub)))
                             (FNExp:
                              (Match:
                               (Mrule:
                                (ATPat: (IDAtPat: (LongVId: ppX)))
                                (FNExp:
                                 (Match:
                                  (Mrule:
                                   (ATPat: (IDAtPat: (LongVId: x)))
                                   (FNExp:
                                    (Match:
                                     (Mrule:
                                      (ATPat:
                                       (RECORDAtPat:
                                        (FIELDPatRow:
                                         (Lab: |1|)
                                         (ATPat: (IDAtPat: (LongVId: out)))
                                         (FIELDPatRow: (Lab: |2|) (ATPat: (IDAtPat: (LongVId: i)))))))
                                      (ATExp:
                                       (PARAtExp:
                                        (APPExp:
                                         (ATExp: (IDAtExp: (LongVId: ppX)))
                                         (RECORDAtExp:
                                          (ExpRow:
                                           (Lab: |1|)
                                           (ATExp: (IDAtExp: (LongVId: out)))
                                           (ExpRow:
                                            (Lab: |2|)
                                            (ATExp: (IDAtExp: (LongVId: i)))
                                            (ExpRow: (Lab: |3|) (ATExp: (IDAtExp: (LongVId: x)))))))))))))))))))))))
                         (SEQStrDec:
                          (DECStrDec:
                           (VALDec:
                            (TyVarseq:)
                            (RECValBind:
                             (PLAINValBind:
                              (ATPat: (IDAtPat: (LongVId: subs)))
                              (FNExp:
                               (Match:
                                (Mrule:
                                 (ATPat: (IDAtPat: (LongVId: ppX)))
                                 (FNExp:
                                  (Match:
                                   (Mrule:
                                    (ATPat: (IDAtPat: (LongVId: xs)))
                                    (FNExp:
                                     (Match:
                                      (Mrule:
                                       (ATPat:
                                        (RECORDAtPat:
                                         (FIELDPatRow:
                                          (Lab: |1|)
                                          (ATPat: (IDAtPat: (LongVId: out)))
                                          (FIELDPatRow: (Lab: |2|) (ATPat: (IDAtPat: (LongVId: i)))))))
                                       (ATExp:
                                        (PARAtExp:
                                         (APPExp:
                                          (ATExp:
                                           (PARAtExp:
                                            (APPExp:
                                             (ATExp: (IDAtExp: (LongVId: List.app)))
                                             (PARAtExp:
                                              (FNExp:
                                               (Match:
                                                (Mrule:
                                                 (ATPat: (IDAtPat: (LongVId: x)))
                                                 (ATExp:
                                                  (PARAtExp:
                                                   (APPExp:
                                                    (ATExp: (IDAtExp: (LongVId: ppX)))
                                                    (RECORDAtExp:
                                                     (ExpRow:
                                                      (Lab: |1|)
                                                      (ATExp: (IDAtExp: (LongVId: out)))
                                                      (ExpRow:
                                                       (Lab: |2|)
                                                       (ATExp: (IDAtExp: (LongVId: i)))
                                                       (ExpRow: (Lab: |3|) (ATExp: (IDAtExp: (LongVId: x)))))))))))))))))
                                          (IDAtExp: (LongVId: xs))))))))))))))))))
                          (DECStrDec:
                           (VALDec:
                            (TyVarseq:)
                            (RECValBind:
                             (PLAINValBind:
                              (ATPat: (IDAtPat: (LongVId: subo)))
                              (FNExp:
                               (Match:
                                (Mrule:
                                 (ATPat: (IDAtPat: (LongVId: ppX)))
                                 (FNExp:
                                  (Match:
                                   (Mrule:
                                    (ATPat: (IDAtPat: (LongVId: x_opt)))
                                    (FNExp:
                                     (Match:
                                      (Mrule:
                                       (ATPat:
                                        (RECORDAtPat:
                                         (FIELDPatRow:
                                          (Lab: |1|)
                                          (ATPat: (IDAtPat: (LongVId: out)))
                                          (FIELDPatRow: (Lab: |2|) (ATPat: (IDAtPat: (LongVId: i)))))))
                                       (ATExp:
                                        (PARAtExp:
                                         (APPExp:
                                          (ATExp: (PARAtExp: (APPExp: (ATExp: (IDAtExp: (LongVId: ppOpt))) (IDAtExp: (LongVId: ppX)))))
                                          (RECORDAtExp:
                                           (ExpRow:
                                            (Lab: |1|)
                                            (ATExp: (IDAtExp: (LongVId: out)))
                                            (ExpRow:
                                             (Lab: |2|)
                                             (ATExp: (IDAtExp: (LongVId: i)))
                                             (ExpRow: (Lab: |3|) (ATExp: (IDAtExp: (LongVId: x_opt)))))))))))))))))))))))))))))))))))))))))
        (IDSigExp: (SigId: PP_GRAMMAR-sig)))))))))