src/Tools/Code/code_scala.ML
changeset 61130 8e736ce4c6f4
parent 59323 468bd3aedfa1
child 63303 7cffe366d333
equal deleted inserted replaced
61129:774752af4a1f 61130:8e736ce4c6f4
    61            of SOME app => print_app tyvars is_pat some_thm vars fxy app
    61            of SOME app => print_app tyvars is_pat some_thm vars fxy app
    62             | _ => applify "(" ")" (print_term tyvars is_pat some_thm vars NOBR) fxy
    62             | _ => applify "(" ")" (print_term tyvars is_pat some_thm vars NOBR) fxy
    63                 (print_term tyvars is_pat some_thm vars BR t1) [t2])
    63                 (print_term tyvars is_pat some_thm vars BR t1) [t2])
    64       | print_term tyvars is_pat some_thm vars fxy (IVar v) =
    64       | print_term tyvars is_pat some_thm vars fxy (IVar v) =
    65           print_var vars v
    65           print_var vars v
    66       | print_term tyvars is_pat some_thm vars fxy ((v, ty) `|=> t) =
    66       | print_term tyvars is_pat some_thm vars fxy (t as _ `|=> _) =
    67           let
    67           let
    68             val vars' = intro_vars (the_list v) vars;
    68             val (vs_tys, body) = Code_Thingol.unfold_abs t;
    69           in
    69             val (ps, vars') = fold_map (print_abs_head tyvars) vs_tys vars;
    70             concat [
    70             val vars' = intro_vars (map_filter fst vs_tys) vars;
    71               enclose "(" ")" [constraint (print_var vars' v) (print_typ tyvars NOBR ty)],
    71           in
    72               str "=>",
    72             brackets (ps @| print_term tyvars false some_thm vars' NOBR body)
    73               print_term tyvars false some_thm vars' NOBR t
       
    74             ]
       
    75           end
    73           end
    76       | print_term tyvars is_pat some_thm vars fxy (ICase case_expr) =
    74       | print_term tyvars is_pat some_thm vars fxy (ICase case_expr) =
    77           (case Code_Thingol.unfold_const_app (#primitive case_expr)
    75           (case Code_Thingol.unfold_const_app (#primitive case_expr)
    78            of SOME (app as ({ sym = Constant const, ... }, _)) =>
    76            of SOME (app as ({ sym = Constant const, ... }, _)) =>
    79                 if is_none (const_syntax const)
    77                 if is_none (const_syntax const)
    80                 then print_case tyvars some_thm vars fxy case_expr
    78                 then print_case tyvars some_thm vars fxy case_expr
    81                 else print_app tyvars is_pat some_thm vars fxy app
    79                 else print_app tyvars is_pat some_thm vars fxy app
    82             | NONE => print_case tyvars some_thm vars fxy case_expr)
    80             | NONE => print_case tyvars some_thm vars fxy case_expr)
       
    81     and print_abs_head tyvars (some_v, ty) vars =
       
    82            let
       
    83              val vars' = intro_vars (the_list some_v) vars;
       
    84            in
       
    85              (concat [
       
    86                enclose "(" ")" [constraint (print_var vars' some_v) (print_typ tyvars NOBR ty)],
       
    87                str "=>"
       
    88              ], vars')
       
    89            end
    83     and print_app tyvars is_pat some_thm vars fxy
    90     and print_app tyvars is_pat some_thm vars fxy
    84         (app as ({ sym, typargs, dom, ... }, ts)) =
    91         (app as ({ sym, typargs, dom, ... }, ts)) =
    85       let
    92       let
    86         val k = length ts;
    93         val k = length ts;
    87         val typargs' = if is_pat then [] else typargs;
    94         val typargs' = if is_pat then [] else typargs;