我有
functions :: IO[a -> b] -- IO List of functions param :: IO[a] -- Single parameter
而且我想得到
result :: IO[b] result = IO[*first function* <$> param, *second function* <$> param, ...]
我不知何故可以获得类型的结果IO[IO b]
,但我想要IO[b]
通过"单个参数"我假设你的意思是一个元素列表.如果是这样,那么这就是它的完成方式:
result :: IO [b]
result = do
fs <- functions -- fs :: [a -> b]
xs <- param -- xs :: [a]
let ys = fs <*> xs -- ys :: [b]
return ys
请注意,由于xs
是一个元素列表,因此您实际上是应用fs
该值的每个元素.
这与:
import Control.Applicative (liftA2)
result :: IO [b]
result = liftA2 (<*>) functions param
希望有所帮助.