Javascript 外部monad没有monad约束的MaybeT应用程序实例
我正在Javascript中实现Javascript 外部monad没有monad约束的MaybeT应用程序实例,javascript,haskell,monad-transformers,applicative,Javascript,Haskell,Monad Transformers,Applicative,我正在Javascript中实现Maybe(akaOption)类型的monad转换器(请注意,我使用类型字典传递): const optOfT=of=>x=> of(optOf(x)); 常量opt=map=>f=>ttx=> map(optMap(f))(ttx); 常量optApT=chain=>ttf=>ttx=> 链(tf=> 链(tx=> optAp(tf)(tx)(ttx)(ttf); 常量optChainT=chain=>fm=>mmx=> 链(mx=> 光纤链(fm)(mx))
Maybe
(akaOption
)类型的monad转换器(请注意,我使用类型字典传递):
const optOfT=of=>x=>
of(optOf(x));
常量opt=map=>f=>ttx=>
map(optMap(f))(ttx);
常量optApT=chain=>ttf=>ttx=>
链(tf=>
链(tx=>
optAp(tf)(tx)(ttx)(ttf);
常量optChainT=chain=>fm=>mmx=>
链(mx=>
光纤链(fm)(mx))(mmx);
(map~
,ap~
,chain~=t))->a(bs)->a(bt)
abf abs=纯()abf abs
这似乎正是我想要的,但我无法识别pure()abf abs
的求值顺序以及哪个
操作符属于哪个应用层:
const optApT=(ap,of)=>ttf=>ttx=>
...?
任何提示都将不胜感激。希望这有助于 以下是与各种类型类函数关联的类型:
abf <<**>> abs = pure (<*>) <*> abf <*> abs
(4) (3) (2) (1)
(1), (2): the `ap` for type a
(3): the `ap` for type b
(4): the `pure` for type a
abf abs=pure()abf abs
(4) (3) (2) (1)
(1) ,(2):a型的“ap”
(3) :b类的“ap”
(4) :a型的'pure'
评估顺序为:
(pure (<*>)) <*> abf <*> abs
(纯())abf abs
我就差那么一点点。下面是工作代码:(ap,of)=>ttf=>ttx=>ap(ap(of(optAp))(ttf))(ttx)
。谢谢大家!optAp
实际上可以简化为(map,ap)=>ttf=>ttx=>ap(map(optAp)(ttf))(ttx)
。随着eta减少到(map,ap)=>ttf=>ap(map(optAp)(ttf))
FP真是太棒了!