linera_witty/util/
merge.rs1use either::Either;
7use frunk::{HCons, HNil};
8
9pub trait Merge<Other>: Sized {
13 type Output;
15}
16
17impl Merge<HNil> for HNil {
18 type Output = HNil;
19}
20
21impl<Head, Tail> Merge<HNil> for HCons<Head, Tail>
22where
23 Tail: Merge<HNil>,
24{
25 type Output = HCons<Either<Head, ()>, <Tail as Merge<HNil>>::Output>;
26}
27
28impl<Head, Tail> Merge<HCons<Head, Tail>> for HNil
29where
30 HNil: Merge<Tail>,
31{
32 type Output = HCons<Either<(), Head>, <HNil as Merge<Tail>>::Output>;
33}
34
35impl<LeftHead, LeftTail, RightHead, RightTail> Merge<HCons<RightHead, RightTail>>
36 for HCons<LeftHead, LeftTail>
37where
38 LeftTail: Merge<RightTail>,
39{
40 type Output = HCons<Either<LeftHead, RightHead>, <LeftTail as Merge<RightTail>>::Output>;
41}