【问题标题】:Simple usage samples for haskell Data.HListhaskell Data.HList 的简单使用示例
【发布时间】:2013-07-18 00:52:16
【问题描述】:

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

【问题讨论】:

    标签: generics haskell types polymorphism heterogeneous


    【解决方案1】:

    文章说 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 的链接。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    • 1970-01-01
    • 2017-05-28
    • 1970-01-01
    • 2019-08-02
    • 2016-03-02
    • 2012-06-09
    相关资源
    最近更新 更多