haskell Data.HList的简单用法示例

时间:2013-07-18 21:23:46

标签: generics haskell types polymorphism heterogeneous

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

1 个答案:

答案 0 :(得分:12)

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

如果您使用存在类型,则会丢失所有类型信息,并且您无法对该数据执行任何操作。

可以使它们成为具有有用功能的某个类CanDoStuff的所有实例(使用GADT来实现这一点看起来会更好)。

(但是,这会快速向existential typeclass antipattern发展,您可能更愿意避免所有的麻烦,而不是编写类型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's page about HList的链接,此处是指向paper itself的链接。