例如,如果我有一个HList:
HList<A,HList<B,HList<C,HNil>>> list = ...
有没有办法将每个元素应用于curried函数:
F<A,F<B,F<C,D>>> f = ...
这样我会以某种方式获得D
?
此外,如果我将E
收入HList
HList<E,HList<A,HList<B,HList<C,HNil>>>> list2 = list.extend((E)e);
然后以某种方式应用
F<E,F<A,F<B,F<C,D>>>> ef = ..
以同样的方式到那个HList?
答案 0 :(得分:0)
首先,HList<A, HList <B,HList<C, HNil>>>
不正确。它必须是HCons<A, HCons<B, HCons<C, HNil>>>
。
是否可以将每个元素应用于咖喱函数:
F<A,F<B,F<C,D>>> f = ...
以某种方式我会以某种方式获得
D
?
如果我理解您的问题,那么您想要这样做:
A a = list.head();
B b = list.tail().head();
C c = list.tail().tail().head();
D d = f.f(a).f(b).f(c);
它回答了您的问题,还是其他意思?
此外,如果我将
E
限制在HList中
HList<E,HList<A,HList<B,HList<C,HNil>>>> list2 = list.extend((E)e);
然后以某种方式申请
F<E,F<A,F<B,F<C,D>>>> ef = ..
以相同的方式访问该HList?
再次,如果我的理解是正确的:
E e = list2.head();
A a = list2.tail().head();
B b = list2.tail().tail().head();
C c = list2.tail().tail().tail().head();
D d = ef.f(e).f(a).f(b).f(c);