haar_lib/macros/rec.rs
1//! `rec!`
2
3/// immutableかつ引数を一つのみとる再帰クロージャ
4///
5/// # References
6/// - [https://qiita.com/vain0x/items/90c9580aa34926160ac1](https://qiita.com/vain0x/items/90c9580aa34926160ac1)
7#[macro_export]
8macro_rules! rec {
9 ( |$self:ident, $arg_name:tt: $arg_ty:ty| -> $ret:ty $body:block ) => {{
10 fn recurse<X, Y>(f: &dyn Fn(&dyn Fn(X) -> Y, X) -> Y, x: X) -> Y {
11 f(&|x: X| recurse(&f, x), x)
12 }
13
14 |x| recurse(&|$self, $arg_name: $arg_ty| -> $ret { $body }, x)
15 }};
16}