Skip to content

Instantly share code, notes, and snippets.

@xrl
Created March 27, 2012 22:40
Show Gist options
  • Save xrl/2221098 to your computer and use it in GitHub Desktop.
Save xrl/2221098 to your computer and use it in GitHub Desktop.
The maybe monad with IO?
connect_uri :: U.URI -> Identity -> IO (Maybe Socket)
connect_uri uri id = do
auth <- U.uriAuthority uri
sock <- socktype
let host = U.uriRegName auth
let port = U.uriPort auth
return $ connect host port sock id
where socktype
| U.uriScheme uri == "tcp:" = Just S.Stream
| otherwise = Nothing
connect :: S.HostName -> S.ServiceName -> S.SocketType -> Identity -> IO Socket
connect servaddr servport socktype id = do
addrinfos <- S.getAddrInfo (Just S.defaultHints) (Just servaddr) (Just servport)
let servinfo = head addrinfos
sock <- S.socket (S.addrFamily servinfo) socktype S.defaultProtocol
S.connect sock (S.addrAddress servinfo)
return $ Client sock
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment