hamlet/GrammarProgramFn-functor.ss
(module GrammarProgramFn-functor (planet chongkai/sml)
  (#%module-begin
   (Program:
    (FUNDECTopDec:
     (FunDec:
      (FunBind:
       (FunId: GrammarProgramFn-functor)
       (StrId: _id20-struct)
       (SIGSigExp:
        (SEQSpec:
         (TYPESpec: (TypDec: (TyVarseq:) (TyCon: Info-type)))
         (STRUCTURESpec: (StrDesc: (StrId: Module-struct) (IDSigExp: (SigId: GRAMMAR_MODULE-sig))))))
       (LETStrExp:
        (DECStrDec: (OPENDec: (LongStrId: _id20-struct)))
        (COLONStrExp:
         (STRUCTStrExp:
          (SEQStrDec:
           (STRUCTUREStrDec: (StrBind: (StrId: Module-struct) (IDStrExp: (LongStrId: Module-struct))))
           (SEQStrDec:
            (DECStrDec: (TYPEDec: (TypBind: (TyVarseq:) (TyCon: Info-type) (CONTy: (Tyseq:) (LongTyCon: Info-type)))))
            (SEQStrDec:
             (DECStrDec: (OPENDec: (LongStrId: Module-struct)))
             (SEQStrDec:
              (DECStrDec:
               (DATATYPEDec:
                (DatBind:
                 (TyVarseq:)
                 (TyCon: Program-type)
                 (ConBind:
                  (VId: Program)
                  (RECORDTy:
                   (TyRow:
                    (Lab: |1|)
                    (CONTy: (Tyseq:) (LongTyCon: Info-type))
                    (TyRow:
                     (Lab: |2|)
                     (CONTy: (Tyseq:) (LongTyCon: TopDec-type))
                     (TyRow: (Lab: |3|) (CONTy: (Tyseq: (CONTy: (Tyseq:) (LongTyCon: Program-type))) (LongTyCon: option-type))))))))))
              (DECStrDec:
               (VALDec:
                (TyVarseq:)
                (RECValBind:
                 (PLAINValBind:
                  (ATPat: (IDAtPat: (LongVId: infoProgram)))
                  (FNExp:
                   (Match:
                    (Mrule:
                     (ATPat:
                      (PARAtPat:
                       (ATPat:
                        (PARAtPat:
                         (ATPat:
                          (PARAtPat:
                           (CONPat:
                            (LongVId: Program)
                            (RECORDAtPat:
                             (FIELDPatRow:
                              (Lab: |1|)
                              (ATPat: (IDAtPat: (LongVId: I)))
                              (FIELDPatRow: (Lab: |2|) (ATPat: (WILDCARDAtPat:)) (FIELDPatRow: (Lab: |3|) (ATPat: (WILDCARDAtPat:)))))))))))))
                     (ATExp: (IDAtExp: (LongVId: I)))))))))))))))
         (IDSigExp: (SigId: GRAMMAR_PROGRAM-sig))))))))))