[英]Applying a list of functions in Haskell
我寫了一個函數,它將一個函數列表應用於一個項目。
applyAll :: [a -> b] -> a -> [b]
applyAll [] _ = []
applyAll (f:fs) x = (f x) : (applyAll fs x)
有沒有更好的方法呢?
該函數實際上已作為monadic函數的特例出現:
applyAll :: [a -> b] -> a -> [b]
applyAll = sequence
你可以使用:
applyAll l v = fmap ($ v) l
fmap
在輸入列表上提升了一個函數(實際上是任何Functor)。 $
具有類型(a -> b) -> a -> b
因此它將函數應用於給定值。 ($ v)
是一個部分 ,其給定函數適用於v
。
李的解決方案是我推薦的,但這可能更好看:
import Control.Applicative
applyAll' fs v = fs <*> pure v
要么
applyAll'' fs v = fs <*> [v]
但是,這種方法使得事情變得比必要的更復雜:我們實際上只需要Functor
實例列表,而applyAll'
注入並立即從Applicative
實例中提取。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.