gpt4 book ai didi

haskell - 元组的一元更改

转载 作者:行者123 更新时间:2023-12-03 14:30:51 25 4
gpt4 key购买 nike

我正在寻找一个类似于以下类型的函数:

Monad m => (a, b) -> (b -> m c) -> m (a, c)

在我看来,它是绑定(bind)( >>= )和镜头操作的某种组合。

我知道我可以在绑定(bind)后通过模式匹配来解决这个问题,但我的直觉告诉我有一种“更简单”的方法可以通过利用镜头来编写它。

有这样的操作吗?

最佳答案

这绝对是镜头。 monad 实际上只是有点分散注意力,因为您只需要一个仿函数:

changesecond (a, b) f = fmap (a,) (f b)
我很确定 _2镜头可以用一个基本的镜头来做你的投标,比如 over但我对图书馆还不太熟悉。
编辑
真的不需要组合器。你可以写
changesecond pair f = _2 f pair
您应该能够从 Lens 的一般定义中解决这个问题。类型。
编辑 2
这个简单的例子展示了 Van Laarhoven 透镜构造的主题:
  • 从上下文中提取焦点。
  • 应用给定的函数来产生一个函数的结果。
  • 使用fmap将上下文恢复到结果。

  • Ed Kmett 的 lens图书馆以各种方式详细阐述了这个主题。有时它会加强仿函数约束。有时它将函数推广到一个profunctor。在 Equality 的情况下,它消除了仿函数约束。事实证明,相同的基本类型形状可以表达很多不同的想法。

    关于haskell - 元组的一元更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31978596/

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