簡體   English   中英

在Haskell中應用函數列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM