gpt4 book ai didi

haskell - 通过动态函数列表传输数据

转载 作者:行者123 更新时间:2023-12-01 17:52:03 24 4
gpt4 key购买 nike

所以我经常发现自己设计像数据流一样的“管道”,通常,管道本身是动态的。

有没有简单的方法来做这样的事情?

pipe :: [a -> a] -> a -> a

或者对于这样的事情我应该达到不同的模式吗?它类似于 State monad,但我不想将函数编辑为 (a -> (), a) 或其他任何内容:/

我意识到这是一个幺半群,所以我写了这个,这似乎是一个优雅的解决方案,这是否存在于某个库中?看起来大多数箭头和函数幺半群做不同的事情。

newtype Comp a = Comp { 
runComp :: a -> a
}

instance Monoid (Comp a) where
(Comp a) `mappend` (Comp b) = Comp (b . a)
mempty = Comp id

pipe :: [a -> a] -> a -> a
pipe = runComp . foldMap Comp

有人有用于此类事情的模式吗?谢谢!

最佳答案

您正在寻找其中之一

foldr (.) id        -- right-to-left

foldl (flip (.)) id -- left-to-right

取决于您希望函数组成的顺序:

ghci> foldr (.) id [(+1),(*10)] 0
1
ghci> foldl (flip (.)) id [(+1),(*10)] 0
10

关于haskell - 通过动态函数列表传输数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41033743/

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