hamlet/LongIdFn-functor.ss
(module LongIdFn-functor (planet chongkai/sml)
  (#%module-begin
   (Program:
    (FUNDECTopDec:
     (FunDec:
      (FunBind:
       (FunId: LongIdFn-functor)
       (StrId: _id35-struct)
       (SIGSigExp:
        (SEQSpec:
         (STRUCTURESpec: (StrDesc: (StrId: Id-struct) (IDSigExp: (SigId: ID-sig))))
         (STRUCTURESpec: (StrDesc: (StrId: StrId-struct) (IDSigExp: (SigId: ID-sig))))))
       (LETStrExp:
        (DECStrDec: (OPENDec: (LongStrId: _id35-struct)))
        (COLONStrExp:
         (STRUCTStrExp:
          (SEQStrDec:
           (STRUCTUREStrDec: (StrBind: (StrId: Id-struct) (IDStrExp: (LongStrId: Id-struct))))
           (SEQStrDec:
            (STRUCTUREStrDec: (StrBind: (StrId: StrId-struct) (IDStrExp: (LongStrId: StrId-struct))))
            (SEQStrDec:
             (DECStrDec: (TYPEDec: (TypBind: (TyVarseq:) (TyCon: Id-type) (CONTy: (Tyseq:) (LongTyCon: Id.Id-type)))))
             (SEQStrDec:
              (DECStrDec: (TYPEDec: (TypBind: (TyVarseq:) (TyCon: StrId-type) (CONTy: (Tyseq:) (LongTyCon: StrId.Id-type)))))
              (SEQStrDec:
               (DECStrDec:
                (TYPEDec:
                 (TypBind:
                  (TyVarseq:)
                  (TyCon: longId-type)
                  (RECORDTy:
                   (TyRow:
                    (Lab: |1|)
                    (CONTy: (Tyseq: (CONTy: (Tyseq:) (LongTyCon: StrId-type))) (LongTyCon: list-type))
                    (TyRow: (Lab: |2|) (CONTy: (Tyseq:) (LongTyCon: Id-type))))))))
               (SEQStrDec:
                (DECStrDec:
                 (VALDec:
                  (TyVarseq:)
                  (RECValBind:
                   (PLAINValBind:
                    (ATPat: (IDAtPat: (LongVId: toId)))
                    (FNExp:
                     (Match:
                      (Mrule:
                       (ATPat:
                        (PARAtPat:
                         (ATPat:
                          (RECORDAtPat:
                           (FIELDPatRow: (Lab: |1|) (ATPat: (IDAtPat: (LongVId: strid))) (FIELDPatRow: (Lab: |2|) (ATPat: (IDAtPat: (LongVId: id)))))))))
                       (ATExp: (IDAtExp: (LongVId: id))))))))))
                (SEQStrDec:
                 (DECStrDec:
                  (VALDec:
                   (TyVarseq:)
                   (RECValBind:
                    (PLAINValBind:
                     (ATPat: (IDAtPat: (LongVId: fromId)))
                     (FNExp:
                      (Match:
                       (Mrule:
                        (ATPat: (PARAtPat: (ATPat: (IDAtPat: (LongVId: id)))))
                        (ATExp:
                         (RECORDAtExp:
                          (ExpRow: (Lab: |1|) (ATExp: (IDAtExp: (LongVId: nil))) (ExpRow: (Lab: |2|) (ATExp: (IDAtExp: (LongVId: id))))))))))))))
                 (SEQStrDec:
                  (DECStrDec:
                   (VALDec:
                    (TyVarseq:)
                    (RECValBind:
                     (PLAINValBind:
                      (ATPat: (IDAtPat: (LongVId: invent)))
                      (FNExp:
                       (Match:
                        (Mrule:
                         (ATPat: (PARAtPat: (ATPat: (RECORDAtPat:))))
                         (ATExp:
                          (RECORDAtExp:
                           (ExpRow:
                            (Lab: |1|)
                            (ATExp: (IDAtExp: (LongVId: nil)))
                            (ExpRow: (Lab: |2|) (ATExp: (PARAtExp: (APPExp: (ATExp: (IDAtExp: (LongVId: Id.invent))) (RECORDAtExp:)))))))))))))))
                  (SEQStrDec:
                   (DECStrDec:
                    (VALDec:
                     (TyVarseq:)
                     (RECValBind:
                      (PLAINValBind:
                       (ATPat: (IDAtPat: (LongVId: toString)))
                       (FNExp:
                        (Match:
                         (Mrule:
                          (ATPat:
                           (PARAtPat:
                            (ATPat:
                             (RECORDAtPat:
                              (FIELDPatRow: (Lab: |1|) (ATPat: (IDAtPat: (LongVId: strids))) (FIELDPatRow: (Lab: |2|) (ATPat: (IDAtPat: (LongVId: id)))))))))
                          (ATExp:
                           (LETAtExp:
                            (VALDec:
                             (TyVarseq:)
                             (RECValBind:
                              (PLAINValBind:
                               (ATPat: (IDAtPat: (LongVId: prefix)))
                               (FNExp:
                                (Match:
                                 (Mrule:
                                  (ATPat: (PARAtPat: (ATPat: (IDAtPat: (LongVId: nil)))))
                                  (ATExp: (PARAtExp: (APPExp: (ATExp: (IDAtExp: (LongVId: Id.toString))) (IDAtExp: (LongVId: id))))))
                                 (Match:
                                  (Mrule:
                                   (ATPat:
                                    (PARAtPat:
                                     (ATPat:
                                      (PARAtPat:
                                       (ATPat:
                                        (PARAtPat:
                                         (CONPat:
                                          (LongVId: ::)
                                          (RECORDAtPat:
                                           (FIELDPatRow:
                                            (Lab: |1|)
                                            (ATPat: (IDAtPat: (LongVId: id)))
                                            (FIELDPatRow: (Lab: |2|) (ATPat: (IDAtPat: (LongVId: ids)))))))))))))
                                   (ATExp:
                                    (PARAtExp:
                                     (APPExp:
                                      (ATExp: (IDAtExp: (LongVId: ^)))
                                      (RECORDAtExp:
                                       (ExpRow:
                                        (Lab: |1|)
                                        (ATExp:
                                         (PARAtExp:
                                          (APPExp:
                                           (ATExp: (IDAtExp: (LongVId: ^)))
                                           (RECORDAtExp:
                                            (ExpRow:
                                             (Lab: |1|)
                                             (ATExp: (PARAtExp: (APPExp: (ATExp: (IDAtExp: (LongVId: StrId.toString))) (IDAtExp: (LongVId: id)))))
                                             (ExpRow: (Lab: |2|) (ATExp: (SCONAtExp: (STRINGSCon: ".")))))))))
                                        (ExpRow:
                                         (Lab: |2|)
                                         (ATExp: (PARAtExp: (APPExp: (ATExp: (IDAtExp: (LongVId: prefix))) (IDAtExp: (LongVId: ids))))))))))))))))))
                            (ATExp: (PARAtExp: (APPExp: (ATExp: (IDAtExp: (LongVId: prefix))) (IDAtExp: (LongVId: strids))))))))))))))
                   (SEQStrDec:
                    (DECStrDec:
                     (VALDec:
                      (TyVarseq:)
                      (RECValBind:
                       (PLAINValBind:
                        (ATPat: (IDAtPat: (LongVId: strengthen)))
                        (FNExp:
                         (Match:
                          (Mrule:
                           (ATPat:
                            (PARAtPat:
                             (ATPat:
                              (RECORDAtPat:
                               (FIELDPatRow:
                                (Lab: |1|)
                                (ATPat: (IDAtPat: (LongVId: strid)))
                                (FIELDPatRow:
                                 (Lab: |2|)
                                 (ATPat:
                                  (RECORDAtPat:
                                   (FIELDPatRow:
                                    (Lab: |1|)
                                    (ATPat: (IDAtPat: (LongVId: strids)))
                                    (FIELDPatRow: (Lab: |2|) (ATPat: (IDAtPat: (LongVId: id)))))))))))))
                           (ATExp:
                            (RECORDAtExp:
                             (ExpRow:
                              (Lab: |1|)
                              (ATExp:
                               (PARAtExp:
                                (APPExp:
                                 (ATExp: (IDAtExp: (LongVId: ::)))
                                 (RECORDAtExp:
                                  (ExpRow: (Lab: |1|) (ATExp: (IDAtExp: (LongVId: strid))) (ExpRow: (Lab: |2|) (ATExp: (IDAtExp: (LongVId: strids)))))))))
                              (ExpRow: (Lab: |2|) (ATExp: (IDAtExp: (LongVId: id))))))))))))))
                    (SEQStrDec:
                     (DECStrDec:
                      (VALDec:
                       (TyVarseq:)
                       (RECValBind:
                        (PLAINValBind:
                         (ATPat: (IDAtPat: (LongVId: implode)))
                         (FNExp: (Match: (Mrule: (ATPat: (PARAtPat: (ATPat: (IDAtPat: (LongVId: longid))))) (ATExp: (IDAtExp: (LongVId: longid))))))))))
                     (SEQStrDec:
                      (DECStrDec:
                       (VALDec:
                        (TyVarseq:)
                        (RECValBind:
                         (PLAINValBind:
                          (ATPat: (IDAtPat: (LongVId: explode)))
                          (FNExp: (Match: (Mrule: (ATPat: (PARAtPat: (ATPat: (IDAtPat: (LongVId: longid))))) (ATExp: (IDAtExp: (LongVId: longid))))))))))
                      (SEQStrDec:
                       (DECStrDec:
                        (VALDec:
                         (TyVarseq:)
                         (RECValBind:
                          (PLAINValBind:
                           (ATPat: (IDAtPat: (LongVId: isUnqualified)))
                           (FNExp:
                            (Match:
                             (Mrule:
                              (ATPat:
                               (PARAtPat:
                                (ATPat:
                                 (RECORDAtPat:
                                  (FIELDPatRow:
                                   (Lab: |1|)
                                   (ATPat: (IDAtPat: (LongVId: strids)))
                                   (FIELDPatRow: (Lab: |2|) (ATPat: (IDAtPat: (LongVId: id)))))))))
                              (ATExp: (PARAtExp: (APPExp: (ATExp: (IDAtExp: (LongVId: List.null))) (IDAtExp: (LongVId: strids))))))))))))
                       (DECStrDec:
                        (VALDec:
                         (TyVarseq:)
                         (RECValBind:
                          (PLAINValBind:
                           (ATPat: (IDAtPat: (LongVId: compare)))
                           (FNExp:
                            (Match:
                             (Mrule:
                              (ATPat:
                               (PARAtPat:
                                (ATPat:
                                 (RECORDAtPat:
                                  (FIELDPatRow:
                                   (Lab: |1|)
                                   (ATPat: (IDAtPat: (LongVId: longid1)))
                                   (FIELDPatRow: (Lab: |2|) (ATPat: (IDAtPat: (LongVId: longid2)))))))))
                              (ATExp:
                               (PARAtExp:
                                (APPExp:
                                 (ATExp: (IDAtExp: (LongVId: String.compare)))
                                 (RECORDAtExp:
                                  (ExpRow:
                                   (Lab: |1|)
                                   (ATExp: (PARAtExp: (APPExp: (ATExp: (IDAtExp: (LongVId: toString))) (IDAtExp: (LongVId: longid1)))))
                                   (ExpRow:
                                    (Lab: |2|)
                                    (ATExp:
                                     (PARAtExp: (APPExp: (ATExp: (IDAtExp: (LongVId: toString))) (IDAtExp: (LongVId: longid2))))))))))))))))))))))))))))))))
         (WHERETYPESigExp:
          (WHERETYPESigExp: (IDSigExp: (SigId: LONGID-sig)) (TyVarseq:) (LongTyCon: Id.Id-type) (CONTy: (Tyseq:) (LongTyCon: Id.Id-type)))
          (TyVarseq:)
          (LongTyCon: StrId.Id-type)
          (CONTy: (Tyseq:) (LongTyCon: StrId.Id-type)))))))))))