【发布时间】:2013-07-18 00:52:16
【问题描述】:
在哪里可以找到 Data.HList 的简单用法示例?从我在 wiki 中读到的内容来看,对于异构列表来说,这个工具比存在类型“更好”的解决方案,我不明白为什么。
【问题讨论】:
标签: generics haskell types polymorphism heterogeneous
在哪里可以找到 Data.HList 的简单用法示例?从我在 wiki 中读到的内容来看,对于异构列表来说,这个工具比存在类型“更好”的解决方案,我不明白为什么。
【问题讨论】:
标签: generics haskell types polymorphism heterogeneous
文章说 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 的链接。
【讨论】: