在哪里可以找到Data.HList的简单使用示例?从我在维基中读到的内容来看,这个工具对于异构列表来说是一个“更好”的解决方案,而不是存在类型,我不明白为什么。
答案 0 :(得分:12)
文章说HList更好,因为它是打字的。
如果您使用存在类型,则会丢失所有类型信息,并且您无法对该数据执行任何操作。
你可以使它们成为具有有用功能的某个类CanDoStuff
的所有实例(使用GADT来实现这一点看起来会更好)。
(但是,这会快速向existential typeclass antipattern发展,您可能更愿意避免所有的麻烦,而不是编写类型CanDoStuff
,您可以创建一个数据类型HandyStuff
您实际使用的函数和数据,并使用类型类简单地重载函数toHandyStuff
的名称。这样您就可以使用常规列表。)
我认为使用HList的最简单方法是使用Data.HList.GhcSyntax中的运算符。例如
andrew = name .=. "Andrew" .*.
awesomeness .=. 8000 .*.
glasses .=. True .*.
emptyRecord
我可以使用andrew .!. awesomeness
来恢复号码8000
和andrew .!. name
以获得"Andrew"
。很高兴,这些都是打字的,因此很方便。
我们可以awesomeness .=. 4000000 .@. andrew
来突破我的精彩。
与普通记录不同,HList记录可以随时使用您喜欢的任何类型的更多数据进行扩展。
以下是指向Ralf Lämmel's page about HList的链接,此处是指向paper itself的链接。