!import "prelude" !Local !import "io" !Local !import "socket" !Local -- Main accept+echo loop. Recursion via y. echoLoop = y (self : server : withAccepted_ server (err : bind (putStrLn (append "accept error: " err)) (_ : self server)) (clientSock addr : bind (putStrLn (append "client from " addr)) (_ : onResult_ (recv clientSock 4096) (err : bind (closeSocket clientSock) (_ : self server)) (msg : bind (send clientSock msg) (_ : bind (closeSocket clientSock) (_ : self server)))))) main = io ( onOk_ socket (server : onOk_ (bindSocket server "127.0.0.1" 0) (_ : onOk_ (listen server 5) (_ : onOk_ (getSocketName server) (port : bind (putStrLn (append "Echo server listening on port " (showNumber port))) (_ : echoLoop server))))))