Skip to content

Commit

Permalink
snocket: Accept in arbitrary monad
Browse files Browse the repository at this point in the history
Forcing IO excplicitly in Accept renders 'Snocket' unusabel in non IO
monads.
  • Loading branch information
coot authored and newhoggy committed Nov 23, 2020
1 parent 6d31ced commit d172c4a
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 7 deletions.
12 changes: 6 additions & 6 deletions ouroboros-network-framework/src/Ouroboros/Network/Snocket.hs
Original file line number Diff line number Diff line change
Expand Up @@ -91,11 +91,11 @@ import Ouroboros.Network.IOManager
-- created by 'open' and only subsequent calls will create a new file
-- descriptor by `createNamedPipe`, see 'namedPipeSnocket'.
--
newtype Accept addr fd = Accept
{ runAccept :: IO (fd, addr, Accept addr fd)
newtype Accept m addr fd = Accept
{ runAccept :: m (fd, addr, Accept m addr fd)
}

instance Bifunctor Accept where
instance Functor m => Bifunctor (Accept m) where
bimap f g ac = Accept $ h <$> runAccept ac
where
h (fd, addr, next) = (g fd, f addr, bimap f g next)
Expand All @@ -105,7 +105,7 @@ instance Bifunctor Accept where
--
berkeleyAccept :: IOManager
-> Socket
-> Accept SockAddr Socket
-> Accept IO SockAddr Socket
berkeleyAccept ioManager sock = go
where
go = Accept $ do
Expand Down Expand Up @@ -181,7 +181,7 @@ data Snocket m fd addr = Snocket {
, bind :: fd -> addr -> m ()
, listen :: fd -> m ()

, accept :: fd -> Accept addr fd
, accept :: fd -> Accept m addr fd

, close :: fd -> m ()

Expand Down Expand Up @@ -346,7 +346,7 @@ localSnocket ioManager path = Snocket {
localAddress :: LocalAddress
localAddress = LocalAddress path

acceptNext :: Accept LocalAddress LocalSocket
acceptNext :: Accept IO LocalAddress LocalSocket
acceptNext = Accept $ do
hpipe <- Win32.createNamedPipe
path
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -420,7 +420,7 @@ fromSnocket
-> Server.Socket addr fd
fromSnocket tblVar sn sd = go (Snocket.accept sn sd)
where
go :: Snocket.Accept addr fd -> Server.Socket addr fd
go :: Snocket.Accept IO addr fd -> Server.Socket addr fd
go (Snocket.Accept accept) = Server.Socket $ do
(sd', remoteAddr, next) <- accept
-- TOOD: we don't need to that on each accept
Expand Down

0 comments on commit d172c4a

Please sign in to comment.