16

可以仅使用标准函数(不通过方程式定义它)而不使用 lambda(匿名函数)在 Haskell 中表达S组合器的模拟吗?我希望它是 type (a -> b -> c) -> (a -> b) -> a -> c

例如,K组合子的模拟就是const.

事实上,我正在尝试\f x -> f x x使用标准函数来表达函数,但想不出任何标准的非线性函数开始(即多次使用其参数的函数)。

4

3 回答 3

32

s = (<*>)例如((->) r) Applicative

于 2014-04-15T22:00:03.273 回答
21

虽然一开始看起来不像,但它ap是 S 组合器(并且join是你真正想要的组合器)。

于 2014-04-15T21:59:14.870 回答
0

它也可以使用(=<<), (>>=)

它们都包含在 Prelude 中

instance Monad ((->) r) where  
    return = const
    f >>= k = \ r -> k (f r) r  
于 2015-07-20T11:26:22.413 回答