gpt4 book ai didi

haskell - Traversable 到 Traversable 只遍历指定索引的元素

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

我想知道是否可以构造以下函数

ix :: (Applicative a, Traversable t) => Int -> (v -> a v) -> (t v -> a (t v))

对除第i个元素之外的所有元素使用pure,其中第i个元素使用v -> a v(遍历具有指定索引的值)。

基本上,我试图概括所有可遍历的以下函数。或者说这是不可能的? Traversable 始终可以转换为 Zipper我认为这可以推广。

idx _ _ []     = pure []
idx 0 f (x:xs) = (:xs) <$> f x
idx i f (x:xs) = (x:) <$> idx (i - 1) f xs

最佳答案

这是一次临时尝试。我确信还有更优雅的选择:

import Control.Applicative
import Control.Monad.State
import Data.Traversable as T

ix :: (Applicative a, Traversable t) => Int -> (v -> a v) -> (t v -> a (t v))
ix i f =
sequenceA
. flip evalState 0
. T.mapM (\ x -> do
j <- get
put (j + 1)
if i == j then return (f x)
else return (pure x))

关于haskell - Traversable 到 Traversable 只遍历指定索引的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27062321/

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