You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Haskell中Applicative上下文内函数列表对值列表的应用方法

Applicative上下文下函数列表对值列表的应用方案

问题场景

给定Applicative类型上下文f,我们有:

  • F :: f [a -> a]:被上下文包裹的函数列表
  • V :: f [a]:被同一上下文包裹的值列表

需要将F中的函数应用到V的对应值上,得到f [a]类型的结果。

现有尝试的类型问题

你之前的代码存在类型不匹配:

  1. (F <*>) <*> V:<*>操作符要求左侧是f (x -> y)类型,但F是f [a->a],[a->a]并非单参数函数类型,因此F <*>本身类型不合法,无法继续与V组合。
  2. (V <*>)(F <*>):同样,F <*>类型错误,且V是f [a],不符合<*>对左侧必须是函数上下文的要求。

解决方案

对应元素应用(函数与值按位置匹配)

如果需要将函数列表和值列表的对应元素逐一应用(即第n个函数作用于第n个值),可以使用liftA2结合zipWith ($):

liftA2 (zipWith ($)) F V
  • zipWith ($)的类型是[a->a] -> [a] -> [a],负责将两个列表的对应元素做函数应用。
  • liftA2则将这个二元函数提升到Applicative上下文f中,把F和V两个上下文包裹的值组合起来,最终得到f [a]类型的结果。

全量应用(每个函数作用于所有值)

如果需要让每个函数都作用于值列表的所有元素,生成嵌套列表结果f [[a]],可以使用:

liftA2 (\fs vs -> map (\f -> map f vs) fs) F V

这里通过嵌套map,先遍历函数列表,再将每个函数应用到整个值列表的元素上。

内容的提问来源于stack exchange,提问作者Siam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 01:20:37