2016-04-02 6 views
0

私は特にdoブロックHaskellのインデントについて非常に混乱しています私はラインaction <-「最後の文で次のエラーを得ましたdo-blockは式でなければなりません "これをどのように修正すればよいですか?Haskellのインデントブロック「doブロックの最後の文は式でなければなりません」

私はloopのボディはその名以上をインデントする必要があり、次のように定義さ

type NeovimRead = Neovim r st Text 
type NeovimWrite = Text -> Neovim r st() 

consumeLoop :: Server -> NeovimRead -> NeovimWrite -> Neovim r st() 
consumeLoop server read write = do 
    status <- liftIO $ takeMVar (status server) 
    if status == Running 
     then loop 
     else liftIO $ putMVar (status server) status 
    where loop = do 
    action <- liftIO $ readaction server 
    case action of 
     ReadBuffer -> do 
     text <- read 
     liftIO $ putMVar (buffer server) text 
     WriteBuffer -> do 
     text <- liftIO $ takeMVar (buffer server) 
     write text 
    liftIO $ putMVar (status server) Running 
    consumeLoop server read write 

答えて

2

を持っています。例:

consumeLoop :: Server -> NeovimRead -> NeovimWrite -> Neovim r st() 
consumeLoop server read write = do 
    status <- liftIO $ takeMVar (status server) 
    if status == Running 
     then loop 
     else liftIO $ putMVar (status server) status 
    where 
    loop = do 
     action <- liftIO $ readaction server 
     ... 
+0

ありがとうございました。しかし、それが理由であるのはなぜですか? – darwinsenior

+0

'do'ブロックの本体が関数の一部でないかのように、そのために空の' do'ブロックを持っているかのようになっていました。 –

関連する問題