当前位置:  开发笔记 > 编程语言 > 正文

将IO [a - > b]应用于类型a的单个参数

如何解决《将IO[a->b]应用于类型a的单个参数》经验,为你挑选了1个好方法。

我有

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]



1> Aadit M Shah..:

通过"单个参数"我假设你的意思是一个元素列表.如果是这样,那么这就是它的完成方式:

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

希望有所帮助.


`liftA2(<*>)`是`(<*>)`用于`Compose`,所以你可以写`result = getCompose $ Compose functions <*> Compose param`.如果广泛使用这种模式,最好将所有内容包装在`Compose`中(例如`param:Compose IO [] a`和`result:Compose IO [] b`),那么它只是`result = functions <*> params`.
推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有