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

Haskell中如何将嵌套上下文中的函数应用到f上下文包裹的对应值?

实现方案

这个函数的实现可以直接基于Functor和Applicative的基础操作完成,核心逻辑是保留外层g上下文不变,仅对内层f上下文的函数和参数做Applicative应用。

具体实现

nestedApply :: (Applicative f, Applicative g) => g (f (a -> b)) -> f a -> g (f b)
nestedApply gWrappedFunc fa = fmap (<*> fa) gWrappedFunc

逻辑说明

  • 首先,<*> fa是对Applicative操作符<*>的部分应用,它的类型为f (a -> b) -> f b,作用是把接收的f层函数和已有的f a做应用,得到f层的结果
  • 外层通过fmap把上述操作映射到g上下文中,保留g的结构不变,最终得到g (f b)类型的返回值
  • 补充说明:这里其实只要求g满足Functor约束即可,原类型签名的Applicative g约束可以进一步放宽,因为实现中没有用到g的Applicative特性。

示例验证

我们可以用嵌套的常见类型做测试,比如外层g取Maybe,内层f取[]:

-- 测试输入
gWrappedFunc = Just [(+1), (*2)]
fa = [1,2,3]

-- 调用函数
nestedApply gWrappedFunc fa
-- 输出结果:Just [2,3,4,2,4,6]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:57:04