Generics haskell Data.HList的简单用法示例

Generics haskell Data.HList的简单用法示例,generics,haskell,types,polymorphism,heterogeneous,Generics,Haskell,Types,Polymorphism,Heterogeneous,在哪里可以找到Data.HList的简单用法示例?从我在维基上读到的内容来看,对于异构列表,这个工具比存在类型的解决方案“更好”,我不明白为什么。这篇文章说HList更好,因为它是类型化的 如果您使用存在类型,那么您将丢失所有类型信息,并且无法处理这些数据 您可以使它们成为某些类的所有实例,这些类具有有用的函数(使用GADT来实现这一点看起来会更好) (然而,这很快就要实现了,您可能更愿意避免所有的麻烦,而不是编写typeclassCanDoStuff,您可以使用实际使用的函数和数据创建一个数据

在哪里可以找到Data.HList的简单用法示例?从我在维基上读到的内容来看,对于异构列表,这个工具比存在类型的解决方案“更好”,我不明白为什么。

这篇文章说HList更好,因为它是类型化的

如果您使用存在类型,那么您将丢失所有类型信息,并且无法处理这些数据

您可以使它们成为某些类的所有实例,这些类具有有用的函数(使用GADT来实现这一点看起来会更好)

(然而,这很快就要实现了,您可能更愿意避免所有的麻烦,而不是编写typeclass
CanDoStuff
,您可以使用实际使用的函数和数据创建一个数据类型
HandyStuff
,并使用typeclass简单地重载函数名
toHandyStuff
。)(我们应该使用常规列表。)

简单的HList用法 我认为使用HList最简单的方法是使用中的运算符

andrew = name .=. "Andrew" .*.
         awesomeness .=. 8000 .*.
         glasses .=. True .*.
         emptyRecord
我可以使用
andrew.!.awesomeness
来恢复编号
8000
andrew.!.name
来获取
“andrew”
。很高兴,这些都是键入的,因此很方便

我们可以做
awebomeness.=.4000000.@.andrew
来提升我的威严

与普通记录不同,HList记录可以随时使用您喜欢的任何类型的进一步数据进行扩展

阅读更多
这是指向的链接,这是指向的链接。

不幸的是,Data.HList.GhcSyntax在0.3中消失了。0@rcreswick这些东西现在似乎在Data.HList.Record中: