1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
use effectful::{
    bound::Dynamic,
    effective::{Canonical, Effective},
    environment::Environment, DynBind,
};

use crate::{any::OwnedStatic, Walk};

use super::value::ValueWalker;

impl<'ctx, M, E: Environment> Walk<'ctx, M, E> for bool
where
    Dynamic<bool>: DynBind<E>,
    Dynamic<OwnedStatic<bool>>: DynBind<E>,
{
    type Walker = ValueWalker<bool>;

    fn into_walker<'e>(self) -> Canonical<'e, Self::Walker, E> {
        E::value(ValueWalker::new(self)).cast()
    }
}

impl<'ctx, M, E: Environment> Walk<'ctx, M, E> for &'ctx bool
where
    Dynamic<bool>: DynBind<E>,
    Dynamic<OwnedStatic<bool>>: DynBind<E>,
{
    type Walker = ValueWalker<bool>;

    fn into_walker<'e>(self) -> Canonical<'e, Self::Walker, E> {
        E::value(ValueWalker::new(*self)).cast()
    }
}