我正在为idleCallback这个表示法提供一个函数:
idleCallback $= Just (do
    modifyIORef world play
    postRedisplay Nothing)
为什么这个(看似相似)符号不起作用?
idleCallback $= Just $ do
    modifyIORef world play
    postRedisplay Nothing
为了节省你的胡扯,类型是:
($=) :: HasSetter s => s a -> a -> IO ()
type IdleCallback = IO ()
data SettableStateVar a 
idleCallback :: SettableStateVar (Maybe IdleCallback)
postRedisplay :: Maybe Window -> IO ()
modifyIORef :: IORef a -> (a -> a) -> IO ()
GHC说:
Couldn't match expected type `Maybe IdleCallback'
            with actual type `a0 -> Maybe a0'
In the second argument of `($=)', namely `Just'
In the expression: idleCallback $= Just
In a stmt of a 'do' block:
  idleCallback $= Just
  $ do { modifyIORef world play;
         postRedisplay Nothing }
是否可以在不将do括号括在括号中的情况下编写?
这是一个优先级错误....($=)绑定比($)更紧密.您可以在错误消息中看到:
Couldn't match expected type `Maybe IdleCallback'
        with actual type `a0 -> Maybe a0'
In the second argument of `($=)', namely `Just'
它认为($=)的第二个参数是简单的Just(它是引用函数的有效Haskell类型).如果你把括号括在整个Just,包括do-block,它应该工作.
| 归档时间: | 
 | 
| 查看次数: | 234 次 | 
| 最近记录: |