作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
你好哈斯凯勒人。
假设我有一个应用仿函数(不是 monad 的实例)我
想多次应用到一个纯初始值。例如,
λ> Just (1+) <*> (Just (1+) <*> pure 0)
Just 2
fold
.
applyAppl :: Applicative f => f (a -> a) -> Int -> f a -> f a
applyAppl f n i = foldr (<*>) i $ replicate n f
λ> applyAppl (Just (1+)) 10 $ pure 0
Just 10
sequenceA
或
traverse
.它可以?
最佳答案
您可以使用 iterate
:
applyAppl :: Applicative f => f (a -> a) -> Int -> f a -> f a
applyAppl f n i = iterate (f <*>) i !! n
ghci> applyAppl (Just (+1)) 10 (pure 0)
Just 10
iterate
和
(!!)
”模式用于内存,所以我很确定,至少,它不会有更差的性能。
关于haskell - 多次应用应用仿函数的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47646991/
我是一名优秀的程序员,十分优秀!