runhaskell Toy.hs
ile çalışırken çıktı üretmeyen ve süresiz olarak askıda kalan aşağıdaki programa sahibim. Anlayışımla, program "merhaba" yazmalı ve sonra çıkmalıdır. Böyle bir sorunun nasıl çözüleceğine dair bir cevap ve/veya tavsiyede bulunmaktan memnuniyet duyarım. Github'dan (github.com/Gabriel439/Haskell-Pipes-Library) Pipes 4.0.0 kullanıyorum.Borular kullanarak basit program kilitleniyor
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
? Borularda dahili olarak mı kullanılıyor? – ajp
@ajp Bu davranış hiç 'borulara özgü değil. Derleyici, "sonsuza dek" dediğiniz bağlamda kullanmak için hangi monad kullanır. Yanlışlıkla '' sonsuza dek '' derleyicinin 'Request ->' türünde bir işlev beklemediği bir boru kullandığını, dolayısıyla derleyicinin kastettiğim monadın 'Request ->' monad olduğunu ve 'Sunucu İstek Yanıtı' olduğunu anladınız Senin istediğin gibi bir monad. –