module OpenSocket(
  openSocketF,openSocketErrF,
  openLSocketF,openLSocketErrF,
  openFileAsSocketF,openFileAsSocketErrF
  ) where
import Srequest
import Sockets

-- All eta expanstion are due to the monomorphism restriction

openSocketF :: Host -> Port -> (Socket -> f b ho) -> f b ho
openSocketF Host
h = (SocketRequest -> (SocketResponse -> f b ho) -> f b ho)
-> Host -> Port -> (Socket -> f b ho) -> f b ho
forall t t.
(SocketRequest -> (SocketResponse -> t) -> t)
-> Host -> Port -> (Socket -> t) -> t
openSocketF' SocketRequest -> (SocketResponse -> f b ho) -> f b ho
forall (f :: * -> * -> *) b ho.
FudgetIO f =>
SocketRequest -> (SocketResponse -> f b ho) -> f b ho
sIO Host
h
openLSocketF :: Port -> (LSocket -> f b ho) -> f b ho
openLSocketF Port
p = (SocketRequest -> (SocketResponse -> f b ho) -> f b ho)
-> Port -> (LSocket -> f b ho) -> f b ho
forall t t.
(SocketRequest -> (SocketResponse -> t) -> t)
-> Port -> (LSocket -> t) -> t
openLSocketF' SocketRequest -> (SocketResponse -> f b ho) -> f b ho
forall (f :: * -> * -> *) b ho.
FudgetIO f =>
SocketRequest -> (SocketResponse -> f b ho) -> f b ho
sIO Port
p
openFileAsSocketF :: Host -> Host -> (Socket -> f b ho) -> f b ho
openFileAsSocketF Host
h = (SocketRequest -> (SocketResponse -> f b ho) -> f b ho)
-> Host -> Host -> (Socket -> f b ho) -> f b ho
forall t t.
(SocketRequest -> (SocketResponse -> t) -> t)
-> Host -> Host -> (Socket -> t) -> t
openFileAsSocketF' SocketRequest -> (SocketResponse -> f b ho) -> f b ho
forall (f :: * -> * -> *) b ho.
FudgetIO f =>
SocketRequest -> (SocketResponse -> f b ho) -> f b ho
sIO Host
h

openSocketErrF :: Host -> Port -> (IOError -> f b ho) -> (Socket -> f b ho) -> f b ho
openSocketErrF Host
h Port
p IOError -> f b ho
e = (SocketRequest -> (SocketResponse -> f b ho) -> f b ho)
-> Host -> Port -> (Socket -> f b ho) -> f b ho
forall t t.
(SocketRequest -> (SocketResponse -> t) -> t)
-> Host -> Port -> (Socket -> t) -> t
openSocketF' ((IOError -> f b ho)
-> SocketRequest -> (SocketResponse -> f b ho) -> f b ho
forall (f :: * -> * -> *) b ho.
FudgetIO f =>
(IOError -> f b ho)
-> SocketRequest -> (SocketResponse -> f b ho) -> f b ho
sIOerr' IOError -> f b ho
e) Host
h Port
p
openLSocketErrF :: Port -> (IOError -> f b ho) -> (LSocket -> f b ho) -> f b ho
openLSocketErrF Port
p IOError -> f b ho
e = (SocketRequest -> (SocketResponse -> f b ho) -> f b ho)
-> Port -> (LSocket -> f b ho) -> f b ho
forall t t.
(SocketRequest -> (SocketResponse -> t) -> t)
-> Port -> (LSocket -> t) -> t
openLSocketF' ((IOError -> f b ho)
-> SocketRequest -> (SocketResponse -> f b ho) -> f b ho
forall (f :: * -> * -> *) b ho.
FudgetIO f =>
(IOError -> f b ho)
-> SocketRequest -> (SocketResponse -> f b ho) -> f b ho
sIOerr' IOError -> f b ho
e) Port
p
openFileAsSocketErrF :: Host -> Host -> (IOError -> f b ho) -> (Socket -> f b ho) -> f b ho
openFileAsSocketErrF Host
n Host
m IOError -> f b ho
e = (SocketRequest -> (SocketResponse -> f b ho) -> f b ho)
-> Host -> Host -> (Socket -> f b ho) -> f b ho
forall t t.
(SocketRequest -> (SocketResponse -> t) -> t)
-> Host -> Host -> (Socket -> t) -> t
openFileAsSocketF' ((IOError -> f b ho)
-> SocketRequest -> (SocketResponse -> f b ho) -> f b ho
forall (f :: * -> * -> *) b ho.
FudgetIO f =>
(IOError -> f b ho)
-> SocketRequest -> (SocketResponse -> f b ho) -> f b ho
sIOerr' IOError -> f b ho
e) Host
n Host
m

openSocketF' :: (SocketRequest -> (SocketResponse -> t) -> t)
-> Host -> Port -> (Socket -> t) -> t
openSocketF' SocketRequest -> (SocketResponse -> t) -> t
sio Host
host Port
port Socket -> t
cont =
  SocketRequest -> (SocketResponse -> t) -> t
sio (Host -> Port -> SocketRequest
OpenSocket Host
host Port
port) ((SocketResponse -> t) -> t) -> (SocketResponse -> t) -> t
forall a b. (a -> b) -> a -> b
$ \ (Socket Socket
socket) -> Socket -> t
cont Socket
socket

openLSocketF' :: (SocketRequest -> (SocketResponse -> t) -> t)
-> Port -> (LSocket -> t) -> t
openLSocketF' SocketRequest -> (SocketResponse -> t) -> t
sio Port
port LSocket -> t
cont =
  SocketRequest -> (SocketResponse -> t) -> t
sio (Port -> SocketRequest
OpenLSocket Port
port) ((SocketResponse -> t) -> t) -> (SocketResponse -> t) -> t
forall a b. (a -> b) -> a -> b
$ \(LSocket LSocket
lsocket) -> LSocket -> t
cont LSocket
lsocket

openFileAsSocketF' :: (SocketRequest -> (SocketResponse -> t) -> t)
-> Host -> Host -> (Socket -> t) -> t
openFileAsSocketF' SocketRequest -> (SocketResponse -> t) -> t
sio Host
name Host
mode Socket -> t
cont =
  SocketRequest -> (SocketResponse -> t) -> t
sio (Host -> Host -> SocketRequest
OpenFileAsSocket Host
name Host
mode) ((SocketResponse -> t) -> t) -> (SocketResponse -> t) -> t
forall a b. (a -> b) -> a -> b
$ \ (Socket Socket
socket) -> Socket -> t
cont Socket
socket

sIOerr' :: (IOError -> f b ho)
-> SocketRequest -> (SocketResponse -> f b ho) -> f b ho
sIOerr' IOError -> f b ho
e SocketRequest
r = SocketRequest
-> (IOError -> f b ho) -> (SocketResponse -> f b ho) -> f b ho
forall (f :: * -> * -> *) b ho.
FudgetIO f =>
SocketRequest
-> (IOError -> f b ho) -> (SocketResponse -> f b ho) -> f b ho
sIOerr SocketRequest
r IOError -> f b ho
e