我看到了HList包,但我认为这对我需要的东西来说太过分了.
我有这个:
data a :*: b = a :*: b deriving (Show, Eq)
Run Code Online (Sandbox Code Playgroud)
我可以成功地用它来做到这一点:
prepend :: a -> b -> a :*: b
prepend a b = a :*: b
Run Code Online (Sandbox Code Playgroud)
但我希望能够以某种方式迭代"列表"并使用元素做事但不知道如何这样做.
基本的迭代是相对简单的(假设您在基本上是Prolog时很容易思考),按元素类型(或标签)匹配记录是事情变得毛茸茸的事情:根据当前要求的类型相等做一些事情OverlappingInstances,你将无法做到决定(大多数?所有?)多态类型的相等性.
在类型上匹配可能就是你需要"对元素做一些事情",这取决于什么是什么; 删除很简单,应用一个函数,其参数必须与元素类型匹配,这不是微不足道的,但是如果你可以给出元素的数字索引,那么应该可以不使用编译器扩展.
(编辑:这假定您要将第一类函数应用于列表.Rampion的答案显示了如何使用vanilla类型类轻松匹配类型,但类型类不能作为值传递.)
因此,最终可能会发现HList或葡萄柚记录毕竟不是过度杀伤.
| 归档时间: |
|
| 查看次数: |
469 次 |
| 最近记录: |