module Control.App.Network import Control.App import Control.App.Network.Data data SocketState = Ready | Bound | Listening | Open | Closed data Socket : SocketState -> Type where MkSocket : Int -> Socket s data NetworkError = Foo interface Has [Exception NetworkError] e => Network e where newSocket : (1 p : (1 s : Socket Ready) -> App e a) -> App e a done : (1 s : Socket Closed) -> App e () bind : (1 sock : Socket Ready) -> (addr : Maybe SocketAddress) -> (port : Port) -> Either NetworkError (Socket Bound) {- connect : (sock : Socket) -> (addr : SocketAddress) -> (port : Port) -> IO ResultCode listen : (sock : Socket) -> IO Int accept : (sock : Socket) -> IO (Either SocketError (Socket, SocketAddress)) send : (sock : Socket) -> (msg : String) -> IO (Either SocketError ResultCode) recv : (sock : Socket) -> (len : ByteLength) -> IO (Either SocketError (String, ResultCode)) close : Socket -> IO () -}