Skip to content

ZHaskell/z-io

Folders and files

NameName
Last commit message
Last commit date

Latest commit

c035328 · May 20, 2024
May 20, 2024
May 20, 2024
Feb 17, 2021
Apr 6, 2021
Jul 8, 2021
Jul 8, 2021
Jul 26, 2021
Feb 2, 2021
Jul 26, 2021
Jan 28, 2021
Jul 26, 2021
Jan 28, 2021
Feb 4, 2021
Jul 26, 2021
Feb 4, 2021
May 11, 2021
May 20, 2024

Repository files navigation

Z-IO

Hackage Linux Build Status MacOS Build Status Windows Build Status Docker Build Status Gitter chat

This package is part of Z.Haskell project, provides basic IO operations:

  • IO resource management, resource pool
  • File system operations
  • Network: DNS, TCP, UDP and IPC
  • Buffered input and output
  • Process management
  • Environment settings
  • High performance logger
  • High performance low resolution timer

Requirements

  • A working haskell compiler system, GHC(>=8.6), cabal-install(>=2.4), hsc2hs.
  • Tests need hspec-discover.

Example usage

> :set -XOverloadedStrings
> import Z.IO.Network
> import Z.IO.Resource
> import Z.IO.Buffered
>
> -- call getAddrInfo to perform DNS
> head <$> getAddrInfo Nothing "www.bing.com" "http"
AddrInfo {addrFlags = [AI_ADDRCONFIG,AI_V4MAPPED], addrFamily = SocketFamily 2, addrSocketType = SocketType 1, addrProtocol = ProtocolNumber 6, addrAddress = 204.79.197.200:80, addrCanonName = ""}
>
> import qualified Z.Data.Text as T
> -- send a simple HTTP request
> :{
let addr = ipv4 "13.107.21.200" 80
in withResource (initTCPClient defaultTCPClientConfig{ tcpRemoteAddr = addr}) $ \ tcp -> do
    (i, o) <- newBufferedIO tcp
    writeBuffer' o "GET http://www.bing.com HTTP/1.1\r\nHost: www.bing.com\r\n\r\n"
    readBuffer i >>= pure . T.validate
:}
"HTTP/1.1 200 OK\r\nDate: Sat, 19 Sep 2020 06:11:08 GMT\r\nContent-Length: 0\r\n\r\n"
>
> -- Start a TCP echo server, use @nc -v localhost 8080@ to test
> :{
startTCPServer defaultTCPServerConfig{
    tcpListenAddr = SocketAddrIPv4 ipv4Loopback 8080} $ \ tcp -> do
        i <- newBufferedInput tcp
        o <- newBufferedOutput tcp
        forever $ readBuffer i >>= writeBuffer o >> flushBuffer o
}
:}

Dev guide

# get code
git clone --recursive git@github.com:ZHaskell/z-io.git
cd z-io
# build
cabal build
# test
cabal run Z-IO-Test
# install
cabal install
# generate document
cabal haddock