11

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

4

1 回答 1

12

这篇文章说 HList 更好,因为它是打字的。

如果您使用存在类型,您将丢失所有类型信息,并且您对这些数据无能为力。

可以使它们成为具有有用功能的某个类的所有实例CanDoStuff(并且使用 GADT 来执行此操作看起来会更好)。

(但是,这对存在类型类反模式运行得很快,您可能更愿意避免所有麻烦,而不是编写类型类CanDoStuff,您可以HandyStuff使用您实际使用的函数和数据创建数据类型,并使用类型类简单地重载函数的名称toHandyStuff。这样你就可以使用常规列表。)

简单的 HList 用法

我认为使用 HList 最简单的方法是使用 Data.HList.GhcSyntax 中的运算。例如

andrew = name .=. "Andrew" .*.
         awesomeness .=. 8000 .*.
         glasses .=. True .*.
         emptyRecord

我可以andrew .!. awesomeness用来找回号码8000andrew .!. name获取"Andrew". 令人高兴的是,这些都是打字的,因此很方便。

我们可以做一些事情awesomeness .=. 4000000 .@. andrew来打破我的敬畏。

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

阅读更多

这是Ralf Lämmel 关于 HList 的页面的链接,这是论文本身的链接。

于 2013-07-19T00:30:05.363 回答