可以在Haskell中将“Either”列表转换为“HList”吗?

时间:2013-09-29 04:37:07

标签: haskell

例如,假设我有[Either Int Bool],我想将其转换为HList ....所以

[Left 1, Right False, Left 2]

会变成

1 .*. False .*. 2 .*. HNil

(我实际上认为这是不可能的,但我很乐意听到其他情况......即使为这样的函数编写类型似乎也不可能,尽管可能有一种方法可以做到这一点,而不仅仅是编写一个函数)

2 个答案:

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