2

这执行:

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
4

1 回答 1

2
main = join $ tick 0 <$> (getCanvasElementById "stage" >>= getContext2D) 
                     <*> initBranches 

applicative 创建了一个嵌套的 Eff,join 很容易解决这个问题

于 2014-08-18T03:45:37.623 回答