gpt4 book ai didi

haskell - 关于通过多个嵌套功能级别进行映射

转载 作者:行者123 更新时间:2023-12-03 13:56:05 24 4
gpt4 key购买 nike

一个随机的例子:给定以下 [Maybe [a]] ,

x = [Just [1..3], Nothing, Just [9]]
我要 map f = (^2)通过 3 层,从而获得
[Just [1,4,9],Nothing,Just [81]]
最简单的方法似乎是
(fmap . fmap . fmap) (^2) x
在哪里 fmap . fmap . fmap就像 fmap ,但它有 3 层深。
我怀疑需要这样的东西, 在一般情况下组成 fmap给定次数 , 并不少见,所以我想知道标准中是否已经有一些东西可以编写 fmap与自己一定次数。或者可能是“知道”它应该组合多少次的东西 fmap基于输入的自身。

最佳答案

您可以使用 Compose type深入两个(或更多,如果你级联)仿函数级别。
所以我们可以将其实现为:

import Data.Functor.Compose(Compose(Compose, getCompose))

fmap (^2) (Compose (Compose [Just [1,4,9],Nothing,Just [81]]))
然后产生:
Prelude Data.Functor.Compose> fmap (^2) (Compose (Compose [Just [1,4,9],Nothing,Just [81]]))
Compose (Compose [Just [1,16,81],Nothing,Just [6561]])
因此,我们可以使用以下方法打开它:
Prelude Data.Functor.Compose> (getCompose . getCompose . fmap (^2)) (Compose (Compose [Just [1,4,9],Nothing,Just [81]]))
[Just [1,16,81],Nothing,Just [6561]]
通过构造 Compose这是一个结构,它是两个 Functor s 深,因此我们将其设为 Functor 的实例将两者结合起来。

关于haskell - 关于通过多个嵌套功能级别进行映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66883973/

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