在Philip Wadler的Monads中,函数式编程指出:
monad的操作满足三个法则.
...
联想.计算
m,绑定结果a,计算n,绑定结果b,计算o.这种计算中括号的顺序是无关紧要的.m ★ (?a. n ★ ?b. o) = (m ★ ?a. n) ★ ?b. o.变量的作用域一个包括Ø左侧,但不包括Ø在右边,所以只有当这个定律是正确的一个未出现在自由Ø.
是什么让变量'在这种情况下不显得自由'?
ao如果(且仅当)所有出现的ain o都在一个绑定的lambda中,则看起来不自由a.
因此,例如,如果o = \a. a或o = x(a根本不显示),a则不会显示空闲o,但如果o = a或o = \b. a b,a确实显示空闲.