关于Fantasy-Land中ap方法签名的困惑与验证疑问
关于Fantasy-Land中ap方法签名的疑问与验证
Fantasy-Land规范中,ap方法的签名定义为:
fantasy-land/ap :: Apply f => f a ~> f (a -> b) -> f b
我对这个签名的理解是:包含值a的容器f拥有ap方法,该方法接收一个包含函数a -> b的容器f作为参数,并返回包含值b的容器f。
但实际用Folktale测试时得到了不同结果:
const Maybe = require("data.maybe") Maybe.of(5).ap(Maybe.of(x => x + 1)) // Uncaught TypeError: f is not a function Maybe.of(x=>x+1).ap(Maybe.of(5)) // Maybe { value: 6 } Maybe.of(x=>x+1).ap(Either.of(5)) // Either { value: 6 }
用Sanctuary测试也得到类似结果(Sanctuary中ap并非方法):
const S = require("sanctuary") let a = S.of(S.Maybe)(5) let fn = S.of(S.Maybe)(x => x + 1) S.ap(fn)(a) // Just (6) S.ap(a)(fn) // Uncaught TypeError: Invalid value
因此我推测Fantasy-Land中ap方法的签名或许应为:
fantasy-land/ap :: Apply f => f (a -> b) ~> f a -> f b
我是函数式编程(FP)和Fantasy-Land的新手,希望得到指正。
内容的提问来源于stack exchange,提问作者rsmoorthy
相关产品推荐
相关产品推荐

