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
? 그것은 파이프에서 내부적으로 사용됩니까? – ajp
@ajp이 동작은'pipes'에만 국한된 것이 아닙니다. 컴파일러는 여러분이 '영원히'호출하는 컨텍스트에서 사용할 모나드를 유추합니다. 컴파일러가 파이프가 아닌'Request ->'타입의 함수를 기대하고 있었기 때문에 우연히'forever go'를 사용했기 때문에 컴파일러는 당신이 의미하는 모나드가'Request ->'모나드이고'Server Request Response IO' 모나드. –