使用functionaljava HList,有没有办法将任意HList的每个元素传递给相应的curried函数?

时间:2017-04-04 20:30:31

标签: java functional-programming hlist

例如,如果我有一个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?

1 个答案:

答案 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);