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 hi ho) -> f hi ho
openSocketF Host
h = forall {t} {b}.
(SocketRequest -> (SocketResponse -> t) -> b)
-> Host -> Port -> (Socket -> t) -> b
openSocketF' forall {f :: * -> * -> *} {hi} {ho}.
FudgetIO f =>
SocketRequest -> (SocketResponse -> f hi ho) -> f hi ho
sIO Host
h
openLSocketF :: Port -> (LSocket -> f hi ho) -> f hi ho
openLSocketF Port
p = forall {t} {b}.
(SocketRequest -> (SocketResponse -> t) -> b)
-> Port -> (LSocket -> t) -> b
openLSocketF' forall {f :: * -> * -> *} {hi} {ho}.
FudgetIO f =>
SocketRequest -> (SocketResponse -> f hi ho) -> f hi ho
sIO Port
p
openFileAsSocketF :: Host -> Host -> (Socket -> f hi ho) -> f hi ho
openFileAsSocketF Host
h = forall {t} {b}.
(SocketRequest -> (SocketResponse -> t) -> b)
-> Host -> Host -> (Socket -> t) -> b
openFileAsSocketF' forall {f :: * -> * -> *} {hi} {ho}.
FudgetIO f =>
SocketRequest -> (SocketResponse -> f hi ho) -> f hi ho
sIO Host
h

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

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

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

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

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