例如,假设我有[Either Int Bool],我想将其转换为HList ....所以
[Left 1, Right False, Left 2]
会变成
1 .*. False .*. 2 .*. HNil
(我实际上认为这是不可能的,但我很乐意听到其他情况......即使为这样的函数编写类型似乎也不可能,尽管可能有一种方法可以做到这一点,而不仅仅是编写一个函数)
答案 0 :(得分:1)
您无法将[Either Int Bool]
转换为HList,因为它是动态值,但HList具有依赖于其值的静态类型。请考虑以下事项:
1 .*. False .*. 2 .*. HNil
的类型为HCons 1 (HCons False (HCons 2 HNil))
1 .*. HNil
的类型为HCons 1 HNil
这两个值都是您假定的转换函数的可能结果,但它们有不同的类型。
以上是因为有关HList具有什么值的信息必须可供编译器使用以确定其类型。在您的情况下,您只能在运行时获取此值,即程序已经编译时。
答案 1 :(得分:1)
有关如何使用HList执行可扩展变体的信息,请参阅this post by Oleg。