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
相关产品推荐
相关产品推荐

