lib/Option-struct.ss
(module Option-struct (planet chongkai/sml)
  (#%module-begin
   (Program:
    (SIGDECTopDec:
     (SigDec:
      (SigBind:
       (SigId: Option-sig)
       (SIGSigExp:
        (SEQSpec:
         (VALSpec:
          (ValDesc:
           (VId: getOpt)
           (ARROWTy:
            (RECORDTy: (TyRow: (Lab: |1|) (CONTy: (Tyseq: (VARTy: (TyVar: |'a|))) (LongTyCon: option-type)) (TyRow: (Lab: |2|) (VARTy: (TyVar: |'a|)))))
            (VARTy: (TyVar: |'a|)))))
         (SEQSpec:
          (VALSpec:
           (ValDesc: (VId: isSome) (ARROWTy: (CONTy: (Tyseq: (VARTy: (TyVar: |'a|))) (LongTyCon: option-type)) (CONTy: (Tyseq:) (LongTyCon: bool-type)))))
          (SEQSpec:
           (VALSpec: (ValDesc: (VId: valOf) (ARROWTy: (CONTy: (Tyseq: (VARTy: (TyVar: |'a|))) (LongTyCon: option-type)) (VARTy: (TyVar: |'a|)))))
           (SEQSpec:
            (VALSpec:
             (ValDesc:
              (VId: filter)
              (ARROWTy:
               (PARTy: (ARROWTy: (VARTy: (TyVar: |'a|)) (CONTy: (Tyseq:) (LongTyCon: bool-type))))
               (ARROWTy: (VARTy: (TyVar: |'a|)) (CONTy: (Tyseq: (VARTy: (TyVar: |'a|))) (LongTyCon: option-type))))))
            (SEQSpec:
             (VALSpec:
              (ValDesc:
               (VId: map)
               (ARROWTy:
                (PARTy: (ARROWTy: (VARTy: (TyVar: |'a|)) (VARTy: (TyVar: |'b|))))
                (ARROWTy:
                 (CONTy: (Tyseq: (VARTy: (TyVar: |'a|))) (LongTyCon: option-type))
                 (CONTy: (Tyseq: (VARTy: (TyVar: |'b|))) (LongTyCon: option-type))))))
             (SEQSpec:
              (VALSpec:
               (ValDesc:
                (VId: app)
                (ARROWTy:
                 (PARTy: (ARROWTy: (VARTy: (TyVar: |'a|)) (CONTy: (Tyseq:) (LongTyCon: unit-type))))
                 (ARROWTy: (CONTy: (Tyseq: (VARTy: (TyVar: |'a|))) (LongTyCon: option-type)) (CONTy: (Tyseq:) (LongTyCon: unit-type))))))
              (SEQSpec:
               (VALSpec:
                (ValDesc:
                 (VId: join)
                 (ARROWTy:
                  (CONTy: (Tyseq: (CONTy: (Tyseq: (VARTy: (TyVar: |'a|))) (LongTyCon: option-type))) (LongTyCon: option-type))
                  (CONTy: (Tyseq: (VARTy: (TyVar: |'a|))) (LongTyCon: option-type)))))
               (SEQSpec:
                (VALSpec:
                 (ValDesc:
                  (VId: compose)
                  (ARROWTy:
                   (RECORDTy:
                    (TyRow:
                     (Lab: |1|)
                     (PARTy: (ARROWTy: (VARTy: (TyVar: |'a|)) (VARTy: (TyVar: |'b|))))
                     (TyRow: (Lab: |2|) (PARTy: (ARROWTy: (VARTy: (TyVar: |'c|)) (CONTy: (Tyseq: (VARTy: (TyVar: |'a|))) (LongTyCon: option-type)))))))
                   (PARTy: (ARROWTy: (VARTy: (TyVar: |'c|)) (CONTy: (Tyseq: (VARTy: (TyVar: |'b|))) (LongTyCon: option-type)))))))
                (SEQSpec:
                 (VALSpec:
                  (ValDesc:
                   (VId: mapPartial)
                   (ARROWTy:
                    (PARTy: (ARROWTy: (VARTy: (TyVar: |'a|)) (CONTy: (Tyseq: (VARTy: (TyVar: |'b|))) (LongTyCon: option-type))))
                    (PARTy:
                     (ARROWTy:
                      (CONTy: (Tyseq: (VARTy: (TyVar: |'a|))) (LongTyCon: option-type))
                      (CONTy: (Tyseq: (VARTy: (TyVar: |'b|))) (LongTyCon: option-type)))))))
                 (VALSpec:
                  (ValDesc:
                   (VId: composePartial)
                   (ARROWTy:
                    (RECORDTy:
                     (TyRow:
                      (Lab: |1|)
                      (PARTy: (ARROWTy: (VARTy: (TyVar: |'a|)) (CONTy: (Tyseq: (VARTy: (TyVar: |'b|))) (LongTyCon: option-type))))
                      (TyRow: (Lab: |2|) (PARTy: (ARROWTy: (VARTy: (TyVar: |'c|)) (CONTy: (Tyseq: (VARTy: (TyVar: |'a|))) (LongTyCon: option-type)))))))
                    (PARTy: (ARROWTy: (VARTy: (TyVar: |'c|)) (CONTy: (Tyseq: (VARTy: (TyVar: |'b|))) (LongTyCon: option-type)))))))))))))))))))
     (STRDECTopDec:
      (STRUCTUREStrDec:
       (StrBind:
        (StrId: Option-struct)
        (SEALStrExp:
         (STRUCTStrExp:
          (SEQStrDec:
           (SEQStrDec:
            (SEQStrDec:
             (DECStrDec:
              (VALDec:
               (TyVarseq:)
               (RECValBind:
                (PLAINValBind:
                 (ATPat: (IDAtPat: (LongVId: getOpt)))
                 (FNExp:
                  (Match:
                   (Mrule:
                    (ATPat: (IDAtPat: (LongVId: _id10542)))
                    (APPExp:
                     (ATExp:
                      (PARAtExp:
                       (FNExp:
                        (Match:
                         (Mrule:
                          (ATPat:
                           (PARAtPat:
                            (ATPat:
                             (RECORDAtPat:
                              (FIELDPatRow:
                               (Lab: |1|)
                               (ATPat: (PARAtPat: (CONPat: (LongVId: SOME) (IDAtPat: (LongVId: v)))))
                               (FIELDPatRow: (Lab: |2|) (ATPat: (WILDCARDAtPat:))))))))
                          (ATExp: (IDAtExp: (LongVId: v))))
                         (Match:
                          (Mrule:
                           (ATPat:
                            (PARAtPat:
                             (ATPat:
                              (RECORDAtPat:
                               (FIELDPatRow: (Lab: |1|) (ATPat: (IDAtPat: (LongVId: NONE))) (FIELDPatRow: (Lab: |2|) (ATPat: (IDAtPat: (LongVId: a)))))))))
                           (ATExp: (IDAtExp: (LongVId: a)))))))))
                     (PARAtExp: (ATExp: (PARAtExp: (ATExp: (IDAtExp: (LongVId: _id10542))))))))))))))
             (SEQStrDec:
              (SEQStrDec: (EMPTYStrDec:) (EMPTYStrDec:))
              (DECStrDec:
               (VALDec:
                (TyVarseq:)
                (RECValBind:
                 (PLAINValBind:
                  (ATPat: (IDAtPat: (LongVId: isSome)))
                  (FNExp:
                   (Match:
                    (Mrule:
                     (ATPat: (IDAtPat: (LongVId: _id10543)))
                     (APPExp:
                      (ATExp:
                       (PARAtExp:
                        (FNExp:
                         (Match:
                          (Mrule:
                           (ATPat: (PARAtPat: (ATPat: (PARAtPat: (ATPat: (PARAtPat: (CONPat: (LongVId: SOME) (WILDCARDAtPat:))))))))
                           (ATExp: (IDAtExp: (LongVId: true))))
                          (Match: (Mrule: (ATPat: (PARAtPat: (ATPat: (IDAtPat: (LongVId: NONE))))) (ATExp: (IDAtExp: (LongVId: false)))))))))
                      (PARAtExp: (ATExp: (PARAtExp: (ATExp: (IDAtExp: (LongVId: _id10543))))))))))))))))
            (SEQStrDec:
             (SEQStrDec: (EMPTYStrDec:) (EMPTYStrDec:))
             (DECStrDec:
              (VALDec:
               (TyVarseq:)
               (RECValBind:
                (PLAINValBind:
                 (ATPat: (IDAtPat: (LongVId: valOf)))
                 (FNExp:
                  (Match:
                   (Mrule:
                    (ATPat: (IDAtPat: (LongVId: _id10544)))
                    (APPExp:
                     (ATExp:
                      (PARAtExp:
                       (FNExp:
                        (Match:
                         (Mrule:
                          (ATPat: (PARAtPat: (ATPat: (PARAtPat: (ATPat: (PARAtPat: (CONPat: (LongVId: SOME) (IDAtPat: (LongVId: v)))))))))
                          (ATExp: (IDAtExp: (LongVId: v))))
                         (Match: (Mrule: (ATPat: (PARAtPat: (ATPat: (IDAtPat: (LongVId: NONE))))) (RAISEExp: (ATExp: (IDAtExp: (LongVId: Option))))))))))
                     (PARAtExp: (ATExp: (PARAtExp: (ATExp: (IDAtExp: (LongVId: _id10544))))))))))))))))
           (SEQStrDec:
            (SEQStrDec: (EMPTYStrDec:) (EMPTYStrDec:))
            (SEQStrDec:
             (DECStrDec:
              (VALDec:
               (TyVarseq:)
               (RECValBind:
                (PLAINValBind:
                 (ATPat: (IDAtPat: (LongVId: filter)))
                 (FNExp:
                  (Match:
                   (Mrule:
                    (ATPat: (IDAtPat: (LongVId: _id10545)))
                    (FNExp:
                     (Match:
                      (Mrule:
                       (ATPat: (IDAtPat: (LongVId: _id10546)))
                       (APPExp:
                        (ATExp:
                         (PARAtExp:
                          (FNExp:
                           (Match:
                            (Mrule:
                             (ATPat:
                              (RECORDAtPat:
                               (FIELDPatRow: (Lab: |1|) (ATPat: (IDAtPat: (LongVId: p))) (FIELDPatRow: (Lab: |2|) (ATPat: (IDAtPat: (LongVId: x)))))))
                             (APPExp:
                              (ATExp:
                               (PARAtExp:
                                (FNExp:
                                 (Match:
                                  (Mrule:
                                   (ATPat: (IDAtPat: (LongVId: true)))
                                   (ATExp: (PARAtExp: (APPExp: (ATExp: (IDAtExp: (LongVId: SOME))) (IDAtExp: (LongVId: x))))))
                                  (Match: (Mrule: (ATPat: (IDAtPat: (LongVId: false))) (ATExp: (IDAtExp: (LongVId: NONE)))))))))
                              (PARAtExp: (ATExp: (PARAtExp: (APPExp: (ATExp: (IDAtExp: (LongVId: p))) (IDAtExp: (LongVId: x))))))))))))
                        (PARAtExp:
                         (ATExp:
                          (RECORDAtExp:
                           (ExpRow:
                            (Lab: |1|)
                            (ATExp: (IDAtExp: (LongVId: _id10545)))
                            (ExpRow: (Lab: |2|) (ATExp: (IDAtExp: (LongVId: _id10546)))))))))))))))))))
             (SEQStrDec:
              (DECStrDec:
               (VALDec:
                (TyVarseq:)
                (RECValBind:
                 (PLAINValBind:
                  (ATPat: (IDAtPat: (LongVId: map)))
                  (FNExp:
                   (Match:
                    (Mrule:
                     (ATPat: (IDAtPat: (LongVId: _id10547)))
                     (FNExp:
                      (Match:
                       (Mrule:
                        (ATPat: (IDAtPat: (LongVId: _id10548)))
                        (APPExp:
                         (ATExp:
                          (PARAtExp:
                           (FNExp:
                            (Match:
                             (Mrule:
                              (ATPat:
                               (RECORDAtPat:
                                (FIELDPatRow: (Lab: |1|) (ATPat: (IDAtPat: (LongVId: f))) (FIELDPatRow: (Lab: |2|) (ATPat: (IDAtPat: (LongVId: NONE)))))))
                              (ATExp: (IDAtExp: (LongVId: NONE))))
                             (Match:
                              (Mrule:
                               (ATPat:
                                (RECORDAtPat:
                                 (FIELDPatRow:
                                  (Lab: |1|)
                                  (ATPat: (IDAtPat: (LongVId: f)))
                                  (FIELDPatRow: (Lab: |2|) (ATPat: (PARAtPat: (ATPat: (PARAtPat: (CONPat: (LongVId: SOME) (IDAtPat: (LongVId: x)))))))))))
                               (ATExp:
                                (PARAtExp:
                                 (APPExp:
                                  (ATExp: (IDAtExp: (LongVId: SOME)))
                                  (PARAtExp: (ATExp: (PARAtExp: (APPExp: (ATExp: (IDAtExp: (LongVId: f))) (IDAtExp: (LongVId: x)))))))))))))))
                         (PARAtExp:
                          (ATExp:
                           (RECORDAtExp:
                            (ExpRow:
                             (Lab: |1|)
                             (ATExp: (IDAtExp: (LongVId: _id10547)))
                             (ExpRow: (Lab: |2|) (ATExp: (IDAtExp: (LongVId: _id10548)))))))))))))))))))
              (SEQStrDec:
               (DECStrDec:
                (VALDec:
                 (TyVarseq:)
                 (RECValBind:
                  (PLAINValBind:
                   (ATPat: (IDAtPat: (LongVId: app)))
                   (FNExp:
                    (Match:
                     (Mrule:
                      (ATPat: (IDAtPat: (LongVId: _id10549)))
                      (FNExp:
                       (Match:
                        (Mrule:
                         (ATPat: (IDAtPat: (LongVId: _id10550)))
                         (APPExp:
                          (ATExp:
                           (PARAtExp:
                            (FNExp:
                             (Match:
                              (Mrule:
                               (ATPat:
                                (RECORDAtPat:
                                 (FIELDPatRow: (Lab: |1|) (ATPat: (IDAtPat: (LongVId: f))) (FIELDPatRow: (Lab: |2|) (ATPat: (IDAtPat: (LongVId: NONE)))))))
                               (ATExp: (RECORDAtExp:)))
                              (Match:
                               (Mrule:
                                (ATPat:
                                 (RECORDAtPat:
                                  (FIELDPatRow:
                                   (Lab: |1|)
                                   (ATPat: (IDAtPat: (LongVId: f)))
                                   (FIELDPatRow: (Lab: |2|) (ATPat: (PARAtPat: (ATPat: (PARAtPat: (CONPat: (LongVId: SOME) (IDAtPat: (LongVId: x)))))))))))
                                (ATExp: (PARAtExp: (APPExp: (ATExp: (IDAtExp: (LongVId: f))) (IDAtExp: (LongVId: x)))))))))))
                          (PARAtExp:
                           (ATExp:
                            (RECORDAtExp:
                             (ExpRow:
                              (Lab: |1|)
                              (ATExp: (IDAtExp: (LongVId: _id10549)))
                              (ExpRow: (Lab: |2|) (ATExp: (IDAtExp: (LongVId: _id10550)))))))))))))))))))
               (SEQStrDec:
                (DECStrDec:
                 (VALDec:
                  (TyVarseq:)
                  (RECValBind:
                   (PLAINValBind:
                    (ATPat: (IDAtPat: (LongVId: join)))
                    (FNExp:
                     (Match:
                      (Mrule:
                       (ATPat: (IDAtPat: (LongVId: _id10551)))
                       (APPExp:
                        (ATExp:
                         (PARAtExp:
                          (FNExp:
                           (Match:
                            (Mrule: (ATPat: (PARAtPat: (ATPat: (IDAtPat: (LongVId: NONE))))) (ATExp: (IDAtExp: (LongVId: NONE))))
                            (Match:
                             (Mrule:
                              (ATPat: (PARAtPat: (ATPat: (PARAtPat: (ATPat: (PARAtPat: (CONPat: (LongVId: SOME) (IDAtPat: (LongVId: x)))))))))
                              (ATExp: (IDAtExp: (LongVId: x)))))))))
                        (PARAtExp: (ATExp: (PARAtExp: (ATExp: (IDAtExp: (LongVId: _id10551))))))))))))))
                (SEQStrDec:
                 (DECStrDec:
                  (VALDec:
                   (TyVarseq:)
                   (RECValBind:
                    (PLAINValBind:
                     (ATPat: (IDAtPat: (LongVId: mapPartial)))
                     (FNExp:
                      (Match:
                       (Mrule:
                        (ATPat: (IDAtPat: (LongVId: _id10552)))
                        (FNExp:
                         (Match:
                          (Mrule:
                           (ATPat: (IDAtPat: (LongVId: _id10553)))
                           (APPExp:
                            (ATExp:
                             (PARAtExp:
                              (FNExp:
                               (Match:
                                (Mrule:
                                 (ATPat:
                                  (RECORDAtPat:
                                   (FIELDPatRow: (Lab: |1|) (ATPat: (IDAtPat: (LongVId: f))) (FIELDPatRow: (Lab: |2|) (ATPat: (IDAtPat: (LongVId: NONE)))))))
                                 (ATExp: (IDAtExp: (LongVId: NONE))))
                                (Match:
                                 (Mrule:
                                  (ATPat:
                                   (RECORDAtPat:
                                    (FIELDPatRow:
                                     (Lab: |1|)
                                     (ATPat: (IDAtPat: (LongVId: f)))
                                     (FIELDPatRow: (Lab: |2|) (ATPat: (PARAtPat: (ATPat: (PARAtPat: (CONPat: (LongVId: SOME) (IDAtPat: (LongVId: x)))))))))))
                                  (ATExp: (PARAtExp: (APPExp: (ATExp: (IDAtExp: (LongVId: f))) (IDAtExp: (LongVId: x)))))))))))
                            (PARAtExp:
                             (ATExp:
                              (RECORDAtExp:
                               (ExpRow:
                                (Lab: |1|)
                                (ATExp: (IDAtExp: (LongVId: _id10552)))
                                (ExpRow: (Lab: |2|) (ATExp: (IDAtExp: (LongVId: _id10553)))))))))))))))))))
                 (SEQStrDec:
                  (DECStrDec:
                   (VALDec:
                    (TyVarseq:)
                    (RECValBind:
                     (PLAINValBind:
                      (ATPat: (IDAtPat: (LongVId: compose)))
                      (FNExp:
                       (Match:
                        (Mrule:
                         (ATPat: (IDAtPat: (LongVId: _id10554)))
                         (FNExp:
                          (Match:
                           (Mrule:
                            (ATPat: (IDAtPat: (LongVId: _id10555)))
                            (APPExp:
                             (ATExp:
                              (PARAtExp:
                               (FNExp:
                                (Match:
                                 (Mrule:
                                  (ATPat:
                                   (RECORDAtPat:
                                    (FIELDPatRow:
                                     (Lab: |1|)
                                     (ATPat:
                                      (RECORDAtPat:
                                       (FIELDPatRow:
                                        (Lab: |1|)
                                        (ATPat: (IDAtPat: (LongVId: f)))
                                        (FIELDPatRow: (Lab: |2|) (ATPat: (IDAtPat: (LongVId: g)))))))
                                     (FIELDPatRow: (Lab: |2|) (ATPat: (IDAtPat: (LongVId: x)))))))
                                  (APPExp:
                                   (ATExp:
                                    (PARAtExp:
                                     (FNExp:
                                      (Match:
                                       (Mrule: (ATPat: (IDAtPat: (LongVId: NONE))) (ATExp: (IDAtExp: (LongVId: NONE))))
                                       (Match:
                                        (Mrule:
                                         (ATPat: (PARAtPat: (CONPat: (LongVId: SOME) (IDAtPat: (LongVId: y)))))
                                         (ATExp:
                                          (PARAtExp:
                                           (APPExp:
                                            (ATExp: (IDAtExp: (LongVId: SOME)))
                                            (PARAtExp: (ATExp: (PARAtExp: (APPExp: (ATExp: (IDAtExp: (LongVId: f))) (IDAtExp: (LongVId: y)))))))))))))))
                                   (PARAtExp: (ATExp: (PARAtExp: (APPExp: (ATExp: (IDAtExp: (LongVId: g))) (IDAtExp: (LongVId: x))))))))))))
                             (PARAtExp:
                              (ATExp:
                               (RECORDAtExp:
                                (ExpRow:
                                 (Lab: |1|)
                                 (ATExp: (IDAtExp: (LongVId: _id10554)))
                                 (ExpRow: (Lab: |2|) (ATExp: (IDAtExp: (LongVId: _id10555)))))))))))))))))))
                  (DECStrDec:
                   (VALDec:
                    (TyVarseq:)
                    (RECValBind:
                     (PLAINValBind:
                      (ATPat: (IDAtPat: (LongVId: composePartial)))
                      (FNExp:
                       (Match:
                        (Mrule:
                         (ATPat: (IDAtPat: (LongVId: _id10556)))
                         (FNExp:
                          (Match:
                           (Mrule:
                            (ATPat: (IDAtPat: (LongVId: _id10557)))
                            (APPExp:
                             (ATExp:
                              (PARAtExp:
                               (FNExp:
                                (Match:
                                 (Mrule:
                                  (ATPat:
                                   (RECORDAtPat:
                                    (FIELDPatRow:
                                     (Lab: |1|)
                                     (ATPat:
                                      (RECORDAtPat:
                                       (FIELDPatRow:
                                        (Lab: |1|)
                                        (ATPat: (IDAtPat: (LongVId: f)))
                                        (FIELDPatRow: (Lab: |2|) (ATPat: (IDAtPat: (LongVId: g)))))))
                                     (FIELDPatRow: (Lab: |2|) (ATPat: (IDAtPat: (LongVId: x)))))))
                                  (APPExp:
                                   (ATExp:
                                    (PARAtExp:
                                     (FNExp:
                                      (Match:
                                       (Mrule: (ATPat: (IDAtPat: (LongVId: NONE))) (ATExp: (IDAtExp: (LongVId: NONE))))
                                       (Match:
                                        (Mrule:
                                         (ATPat: (PARAtPat: (CONPat: (LongVId: SOME) (IDAtPat: (LongVId: y)))))
                                         (ATExp: (PARAtExp: (APPExp: (ATExp: (IDAtExp: (LongVId: f))) (IDAtExp: (LongVId: y)))))))))))
                                   (PARAtExp: (ATExp: (PARAtExp: (APPExp: (ATExp: (IDAtExp: (LongVId: g))) (IDAtExp: (LongVId: x))))))))))))
                             (PARAtExp:
                              (ATExp:
                               (RECORDAtExp:
                                (ExpRow:
                                 (Lab: |1|)
                                 (ATExp: (IDAtExp: (LongVId: _id10556)))
                                 (ExpRow: (Lab: |2|) (ATExp: (IDAtExp: (LongVId: _id10557))))))))))))))))))))))))))))
         (IDSigExp: (SigId: Option-sig))))))))))