1#[macro_export]
5macro_rules! mdo {
6 (
7 let $p: pat = $e: expr ; $( $t: tt )*
8 ) => (
9 { let $p = $e ; mdo! { $( $t )* } }
10 );
11
12 (
13 let $p: ident : $ty: ty = $e: expr ; $( $t: tt )*
14 ) => (
15 { let $p: $ty = $e ; mdo! { $( $t )* } }
16 );
17
18 (
19 $p: pat =<< $e: expr ; $( $t: tt )*
20 ) => (
21 bind($e, move |$p : &_| mdo! { $( $t )* } )
22 );
23
24 (
25 $p: ident : $ty: ty =<< $e: expr ; $( $t: tt )*
26 ) => (
27 bind($e, move |$p : &$ty| mdo! { $( $t )* } )
28 );
29
30 (
31 ign $e: expr ; $( $t: tt )*
32 ) => (
33 bind($e, move |_| mdo! { $( $t )* })
34 );
35
36 (
37 ret<$ty: ty> $e: expr ;
38 ) => (
39 lift::<$ty, _>($e)
40 );
41}
42
43#[macro_export]
44macro_rules! mdo_c {
45 (
46 let $p: pat = $e: expr ; $( $t: tt )*
47 ) => (
48 { let $p = $e ; mdo_c! { $( $t )* } }
49 );
50
51 (
52 let $p: ident : $ty: ty = $e: expr ; $( $t: tt )*
53 ) => (
54 { let $p: $ty = $e ; mdo_c! { $( $t )* } }
55 );
56
57 (
58 $p: pat =<< $e: expr ; $( $t: tt )*
59 ) => (
60 bind($e, move |$p : &_| mdo_c! { $( $t )* } )
61 );
62
63 (
64 $p: ident : $ty: ty =<< $e: expr ; $( $t: tt )*
65 ) => (
66 bind($e, move |$p : &$ty| mdo_c! { $( $t )* } )
67 );
68
69 (
70 ign $e: expr ; $( $t: tt )*
71 ) => (
72 bind($e, move |_| mdo_c! { $( $t )* })
73 );
74
75 (
76 ret<$ty: ty> $e: expr ;
77 ) => (
78 lift::<$ty, _>($e)
79 );
80
81 (
82 ret $e: expr ;
83 ) => (
84 lift_c($e)
85 );
86}
87
88#[macro_export]
89macro_rules! ldo {
90 (
91 let $p: pat = $e: expr ; $( $t: tt )*
92 ) => (
93 { let $p = $e ; ldo! { $( $t )* } }
94 );
95
96 (
97 let $p: ident : $ty: ty = $e: expr ; $( $t: tt )*
98 ) => (
99 { let $p: $ty = $e ; ldo! { $( $t )* } }
100 );
101
102 (
103 $p: pat =<< $e: expr ; $( $t: tt )*
104 ) => (
105 lbind($e, move |$p| ldo! { $( $t )* } )
106 );
107
108 (
109 $p: ident : $ty: ty =<< $e: expr ; $( $t: tt )*
110 ) => (
111 lbind($e, move |$p : $ty| ldo! { $( $t )* } )
112 );
113
114 (
115 ign $e: expr ; $( $t: tt )*
116 ) => (
117 lbind($e, move |_| ldo! { $( $t )* })
118 );
119
120 (
121 ret<$ty: ty> $e: expr ;
122 ) => (
123 lift::<$ty, _>($e)
124 );
125}