【问题标题】:Elegant way to apply curried function to indexed traversal将柯里化函数应用于索引遍历的优雅方式
【发布时间】:2023-02-26 04:39:29
【问题描述】:

我想编写一个咖喱函数

f :: i -> a -> b

使用索引遍历

l :: IndexedTraversal' i s a

将其应用于 s 并取回 [b]

我想出了

s ^.. l . withIndex . to (uncurry f)

但我想要一个允许我这样做的组合器itoListByOf

s & itoListByOf l f

喜欢

itoListByOf :: IndexedGetting i (Endo [b]) s a -> (i-> a -> b) -> s -> [b]
itoListByOf l f = ifoldrOf l (\i a -> (f i a :)) []

但我想确保我不会错过这个隐藏在库中的组合器,它具有更通用的类型。

【问题讨论】:

    标签: haskell haskell-lens


    【解决方案1】:

    看起来您已经正确定义了 itoListByOf 函数来实现您的目标。虽然镜头库中有许多提供类似功能的组合器,但我认为没有更通用的组合器与您正在寻找的类型完全相同。

    您在 itoListByOf 的定义中使用的 ifoldrOf 函数本身是一个非常通用的函数,可用于遍历任何 IndexedFold 并累积结果。 itoListByOf 函数只是将 ifoldrOf 专门用于以下情况:累积函数是将 f 函数应用于折叠的每个元素并将结果附加到列表的函数。

    总而言之,我相信您对 itoListByOf 的实现是一个很好的实现,并且在镜头库中没有更通用的相同类型的组合器。

    【讨论】:

      猜你喜欢
      • 2014-11-03
      • 2015-07-29
      • 1970-01-01
      • 2011-04-22
      • 1970-01-01
      • 2016-01-01
      • 2013-06-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多