gpt4 book ai didi

haskell - 如何在 Haskell 中迭代异构递归值

转载 作者:行者123 更新时间:2023-12-02 18:22:32 26 4
gpt4 key购买 nike

我看到了 HList 包,但我认为这对于我的需要来说太过分了。

我有这个:

data a :*: b = a :*: b deriving (Show, Eq)

我可以用这个成功地添加到它前面:

prepend :: a -> b -> a :*: b
prepend a b = a :*: b

但我希望能够以某种方式迭代“列表”并使用元素执行操作,但不确定如何执行此操作。

最佳答案

HList paper以及grapefruit-records paper在这里可能有用。

基本迭代相对简单(前提是您能够轻松地思考 Prolog 本质上的内容),按元素类型(或标签)匹配记录是事情变得棘手的地方:根据类型相等性执行某些操作当前需要 OverlappingInstances,并且您将无法决定(大多数?全部?)多态类型的相等性。

类型匹配很可能是您“对元素执行某些操作”所需要的,具体取决于某些内容是什么;删除很容易,应用一个函数,其参数必须与元素类型匹配,这并不简单,但如果您可以给出元素的数字索引,则应该可以在没有编译器扩展的情况下完成。

(编辑:这假设您想要将第一类函数应用于您的列表。Rampion 的答案展示了如何使用普通类型类轻松匹配类型,但类型类不能作为值传递。)

所以,最终,HList 或葡萄柚记录可能并不过分。

关于haskell - 如何在 Haskell 中迭代异构递归值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5024148/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com