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

Haskell函数简化:能否用Applicative ((->) r)优化指定组合子?

更简洁的表达方式

你自己定义的这个组合子,完全等价于Data.Function模块提供的on组合子,直接用它就行,不用重复造轮子:

import Data.Function (on)

-- 原来的 combinator f g x y 可以直接写成
f `on` g x y

on的类型签名和实现与你的需求完全匹配:

on :: (b -> b -> c) -> (a -> b) -> a -> a -> c
f `on` g = \x y -> f (g x) (g y)

如果想用(->) r的Applicative实例来表达,也可以写成下面的形式,但不如on简洁:

combinator f g = \x -> f (g x) <$> g
-- 或者借助Monad绑定的写法
combinator f g = g >>= \gx -> f gx <$> g

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 15:08:23