]> gitweb @ CieloNegro.org - Lucu.git/blobdiff - Network/HTTP/Lucu/SocketLike.hs
Better name-rewriting engine
[Lucu.git] / Network / HTTP / Lucu / SocketLike.hs
index b99811f3bba095f5fc6a586f7b5a00bb2750c23d..b9668e067d47a281516c9fc1cc0c6835a693a20a 100644 (file)
@@ -1,38 +1,42 @@
+{-# LANGUAGE
+    FlexibleContexts
+  , FlexibleInstances
+  , TypeFamilies
+  , UnicodeSyntax
+  #-}
+-- |Type class for things behaves like a 'So.Socket'.
 module Network.HTTP.Lucu.SocketLike
     ( SocketLike(..)
     )
     where
-
 import qualified Network.Socket as So
-import           Network.HTTP.Lucu.HandleLike
+import Network.HTTP.Lucu.HandleLike
 import qualified OpenSSL.Session as SSL
+import Prelude.Unicode
 import qualified System.IO as I
 
-
-class (HandleLike (Handle s)) => SocketLike s where
-    type Handle s :: *
-    accept        :: s -> IO (Handle s, So.SockAddr)
-    socketPort    :: s -> IO So.PortNumber
-
+class (HandleLike (Handle s)) ⇒ SocketLike s where
+    type Handle s ∷ ★
+    accept        ∷ s → IO (Handle s, So.SockAddr)
+    socketPort    ∷ s → IO So.PortNumber
 
 instance SocketLike So.Socket where
     type Handle So.Socket = I.Handle
 
     accept soSelf
-        = do (soPeer, addr) <- So.accept soSelf
-             hPeer          <- So.socketToHandle soPeer I.ReadWriteMode
+        = do (soPeer, addr)  So.accept soSelf
+             hPeer           So.socketToHandle soPeer I.ReadWriteMode
              return (hPeer, addr)
 
     socketPort = So.socketPort
 
-
 instance SocketLike (SSL.SSLContext, So.Socket) where
     type Handle (SSL.SSLContext, So.Socket) = SSL.SSL
 
     accept (ctx, soSelf)
-        = do (soPeer, addr) <- So.accept soSelf
-             ssl            <- SSL.connection ctx soPeer
+        = do (soPeer, addr)  So.accept soSelf
+             ssl             SSL.connection ctx soPeer
              SSL.accept ssl
              return (ssl, addr)
 
-    socketPort = So.socketPort . snd
\ No newline at end of file
+    socketPort = So.socketPort ∘ snd