src/HOL/HOLCF/ex/Pattern_Match.thy
changeset 42284 326f57825e1a
parent 42224 578a51fae383
child 42290 b1f544c84040
equal deleted inserted replaced
42283:25d9d836ed9c 42284:326f57825e1a
   130 
   130 
   131 parse_translation {*
   131 parse_translation {*
   132 (* rewrite (_pat x) => (succeed) *)
   132 (* rewrite (_pat x) => (succeed) *)
   133 (* rewrite (_variable x t) => (Abs_cfun (%x. t)) *)
   133 (* rewrite (_variable x t) => (Abs_cfun (%x. t)) *)
   134  [(@{syntax_const "_pat"}, fn _ => Syntax.const @{const_syntax Fixrec.succeed}),
   134  [(@{syntax_const "_pat"}, fn _ => Syntax.const @{const_syntax Fixrec.succeed}),
   135   mk_binder_tr (@{syntax_const "_variable"}, @{const_syntax Abs_cfun})];
   135   Syntax_Trans.mk_binder_tr (@{syntax_const "_variable"}, @{const_syntax Abs_cfun})];
   136 *}
   136 *}
   137 
   137 
   138 text {* Printing Case expressions *}
   138 text {* Printing Case expressions *}
   139 
   139 
   140 syntax
   140 syntax
   152     |   dest_LAM (Const (@{const_syntax Abs_cfun},_) $ t) =
   152     |   dest_LAM (Const (@{const_syntax Abs_cfun},_) $ t) =
   153           let
   153           let
   154             val abs =
   154             val abs =
   155               case t of Abs abs => abs
   155               case t of Abs abs => abs
   156                 | _ => ("x", dummyT, incr_boundvars 1 t $ Bound 0);
   156                 | _ => ("x", dummyT, incr_boundvars 1 t $ Bound 0);
   157             val (x, t') = atomic_abs_tr' abs;
   157             val (x, t') = Syntax_Trans.atomic_abs_tr' abs;
   158           in (Syntax.const @{syntax_const "_variable"} $ x, t') end
   158           in (Syntax.const @{syntax_const "_variable"} $ x, t') end
   159     |   dest_LAM _ = raise Match; (* too few vars: abort translation *)
   159     |   dest_LAM _ = raise Match; (* too few vars: abort translation *)
   160 
   160 
   161     fun Case1_tr' [Const(@{const_syntax branch},_) $ p, r] =
   161     fun Case1_tr' [Const(@{const_syntax branch},_) $ p, r] =
   162           let val (v, t) = dest_LAM r in
   162           let val (v, t) = dest_LAM r in