2016-04-02 68 views
0

Ben haskell girinti let ve whereHaskell girinti blok

özellikle do blok hakkında çok karıştı "do-bloğundaki son deyimi bir ifade olmalı" I got satır action <- "Son ekstresinde aşağıdaki hata Yap-blok bir ifade olmalıdır "Bunu nasıl düzeltmeliyim?

Ben loop ihtiyaçların vücudun kendi adından daha fazla girintili edilecek

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 

cevap

2

aşağıdakileri ifade edecektir. ör .:

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

Teşekkürler. Ama böyle olmasının bir nedeni var mı? – darwinsenior

+0

Çünkü 'do' bloğunun gövdesi fonksiyonun bir parçası değildi, ve sanki boş bir 'do' bloğunuz varmış gibi oldu, bu yüzden yaptığınız hata mesajını aldınız. –