执行:
main = do
ctx <- getCanvasElementById "stage" >>= getContext2D
bs <- initBranches
tick 0 ctx bs
但这不是:
main = tick 0 <$> (getCanvasElementById "stage" >>= getContext2D)
<*> initBranches
但是两者都是可编译的,而且据我所知,两者都具有相同的基本含义。为什么会这样呢?我可以在这里使用应用语法(它更容易理解吗恕我直言)
这也有效
main = do
a <- (tick 0) <$> (getCanvasElementById "stage" >>= getContext2D) <*> initBranches
b <- a
fprint b
main = join $ tick 0 <$> (getCanvasElementById "stage" >>= getContext2D)
<*> initBranches
应用程序会创建一个嵌套的Eff,join可以轻松解决此问题
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句