私はrunhaskell Toy.hs
で実行すると出力を生成せず、代わりに無期限にハングアップする次のプログラムを持っています。私の理解では、プログラムは "hi"を印刷してから終了する必要があります。私はそのような問題をデバッグする方法についての答えおよび/または助言に感謝します。私はgithub(github.com/Gabriel439/Haskell-Pipes-Library)からパイプ4.0.0を使用しています。パイプを使用する単純なプログラムがハング
module Toy where
import Pipes
import Control.Monad.State
type Request = String
type Response = String
serveChoice :: Request -> Server Request Response IO()
serveChoice = forever go
where go req = do
lift $ putStrLn req
respond req
run :: Monad m =>() -> Client Request Response (StateT Int m)()
run() = do
request "hi"
return()
main :: IO()
main = evalStateT (runEffect $ hoist lift . serveChoice >-> run $()) 0
はどこリーダーモナドは、映像に入って来るのでしょうか?それはPipesの内部で使用されていますか? – ajp
@ajpこの動作は 'pipes'に固有のものではありません。コンパイラは、あなたが 'forever'を呼び出すコンテキストによってどのモナドを使うかを推論します。コンパイラはパイプではなく 'Request - >'型の関数を期待していたので、誤って 'forever go'を使用していたので、' Request - > 'モナドであり、' Server Request Responseあなたが意図したような「IO」モナド。 –