Non riesco a ottenere un semplice esempio di scalaz in esecuzione, la lettura da TCP e la scrittura su std out.Come leggere da TCP e scrivere su stdout?
val src = tcp.reads(1024)
val addr = new InetSocketAddress(12345)
val p = tcp.server(addr, concurrentRequests = 1) {
srC++ tcp.lift(io.stdOutLines)
}
p.run.run
Si siede solo lì, non stampa nulla.
Ho anche provato diverse modalità utilizzando to
, sempre con la formula magica tcp.lift
per ottenere un Process[Connection, A]
, tra cui
tcp.server(addr, concurrentRequests = 1)(src) map (_ to tcp.lift(io.stdOutLines))
che non ha nemmeno la compilazione.
Ho bisogno di wye
i flussi di origine e di stampa insieme? Un esempio che ho trovato sul original pull request per tcp
sostituendo nio
sembrava indicare questo, ma wye
non sembra più esistere su Process
, quindi la confusione regna purtroppo.
Modifica si scopre che, oltre ai problemi di tipo spiegati da Paolo, è inoltre necessario per eseguire i processi interni "manualmente", per esempio facendo p.map(_.run.run).run.run
. Non credo che sia il modo idiomatico per farlo, ma funziona.
L'uso del dispositivo di rimozione della verruca sbt probabilmente catturerebbe quell'inferenza. –
Intendi 'through io.stdOutLines', senza' tcp.lift'? Comunque non sembra che stia tirando fuori qualcosa dal flusso. –
Ok: con 'tcp.lift' rimosso, funziona, ma si noti che è necessario' p.map (_. Run.run) .run.run' per eseguire i processi interni. –