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 に答える