equal
deleted
inserted
replaced
382 |
382 |
383 fun pat_tr ctxt p e opti = (* %x. case x of p => e | _ => [] *) |
383 fun pat_tr ctxt p e opti = (* %x. case x of p => e | _ => [] *) |
384 let |
384 let |
385 val x = Free (Name.variant (fold Term.add_free_names [p, e] []) "x", dummyT); |
385 val x = Free (Name.variant (fold Term.add_free_names [p, e] []) "x", dummyT); |
386 val e = if opti then singl e else e; |
386 val e = if opti then singl e else e; |
387 val case1 = Syntax.const @{syntax_const "_case1"} $ p $ e; |
387 val case1 = Syntax.const @{syntax_const "_case1"} $ Syntax.strip_positions p $ e; |
388 val case2 = |
388 val case2 = |
389 Syntax.const @{syntax_const "_case1"} $ |
389 Syntax.const @{syntax_const "_case1"} $ |
390 Syntax.const @{const_syntax dummy_pattern} $ NilC; |
390 Syntax.const @{const_syntax dummy_pattern} $ NilC; |
391 val cs = Syntax.const @{syntax_const "_case2"} $ case1 $ case2; |
391 val cs = Syntax.const @{syntax_const "_case2"} $ case1 $ case2; |
392 val ft = Datatype_Case.case_tr false Datatype.info_of_constr ctxt [x, cs]; |
392 val ft = Datatype_Case.case_tr false Datatype.info_of_constr ctxt [x, cs]; |