Created
March 27, 2012 22:40
-
-
Save xrl/2221098 to your computer and use it in GitHub Desktop.
The maybe monad with IO?
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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