cabal-version: 2.0 build-type: Simple name: sockets-and-pipes version: 0.1 x-revision: 4 synopsis: Support for the Sockets and Pipes book category: HTTP, Network, Streaming, Text license: Apache-2.0 license-file: license.txt author: Chris Martin, Julie Moronuki maintainer: Joy of Haskell tested-with: GHC == 9.0.1, GHC == 8.10.3, GHC == 8.8.4, GHC == 8.6.5 description: This package contains some utilities that support /Sockets and Pipes/ (available on ), as well as re-exports from all the libraries mentioned in the book. . == Code in this package . Original contributions from this package: . * "SocketsAndPipes.Serve" . == Chapters . List of modules that make a significant appearance in each chapter: . +----+----------------------+----------------------------------+---------------------------------------+ | | Chapter | Module | Purpose | +====+======================+==================================+=======================================+ | 1 | __Handles__ | "System.IO" | Writing to a file | | | +----------------------------------+---------------------------------------+ | | | "Control.Exception.Safe" | Using `bracket` to ensure | | | | | the file handle is closed | +----+----------------------+----------------------------------+---------------------------------------+ | 2 | __Chunks__ | "Data.Text" | `Text` is a chunk of characters | | | +----------------------------------+---------------------------------------+ | | | "Data.Text.IO" | Reading and writing files using | | | | | `Text` instead of `String` | +----+----------------------+----------------------------------+---------------------------------------+ | 3 | __Bytes__ | "Data.Word" | What a byte is | | | +----------------------------------+---------------------------------------+ | | | "Data.ByteString" | `ByteString` is a chunk of bytes | | | +----------------------------------+---------------------------------------+ | | | "Data.Text.Encoding" | Conversions between `ByteString` | | | | | and `Text` | | | +----------------------------------+---------------------------------------+ | | | "Data.String" | How `ByteString` works with | | | +----------------------------------+ `OverloadedStrings` | | | | "Data.ByteString.Char8" | | | | +----------------------------------+---------------------------------------+ | | | "System.IO" | Putting `Handle`s into binary mode | +----+----------------------+----------------------------------+---------------------------------------+ | 4 | __Sockets__ | "Network.Socket" | Opening and closing sockets | | | +----------------------------------+---------------------------------------+ | | | "Network.Socket.ByteString" | Writing to and reading from sockets | | | +----------------------------------+---------------------------------------+ | | | "System.Timeout" | Giving up quickly when a service | | | | | does not respond | +----+----------------------+----------------------------------+---------------------------------------+ | 5 | __HTTP__ | "ASCII" | Expressing HTTP messages as strings | | | +----------------------------------+ | | | | "ASCII.Char" | | | | +----------------------------------+---------------------------------------+ | | | "SocketsAndPipes.Serve" | Our first rudimentary web server | +----+----------------------+----------------------------------+---------------------------------------+ | 6 | __HTTP types__ | "Data.ByteString" | Defining datatypes for the | | | +----------------------------------+ parts of an HTTP message | | | | "Data.ByteString.Lazy" | | +----+----------------------+----------------------------------+---------------------------------------+ | 7 | __Encoding__ | "Data.Text.Lazy" | Efficient string concatenations | | | +----------------------------------+ | | | | "Data.Text.Lazy.Builder" | | | | +----------------------------------+ | | | | "Data.ByteString.Builder" | | | | +----------------------------------+---------------------------------------+ | | | "Data.Time" | Simple performance testing | | | +----------------------------------+---------------------------------------+ | | | "Data.Foldable" | Encoding repetitions with `foldMap` | +----+----------------------+----------------------------------+---------------------------------------+ | 8 | __Responding__ | "Network.Socket.ByteString.Lazy" | Sending responses constructed by | | | | | bytestring `Builder` | | | +----------------------------------+---------------------------------------+ | | | "SocketsAndPipes.Serve" | New web server using the | | | | | encoding functions | | | +----------------------------------+---------------------------------------+ | | | "Data.Int" | Contrasting `Integer`, `Int`, | | | | | and `Int64` | +----+----------------------+----------------------------------+---------------------------------------+ | 9 | __Content types__ | "Data.Text.Lazy.Builder.Int" | Building a text response body | | | +----------------------------------+---------------------------------------+ | | | "Text.Blaze.Html" | Building an HTML response body | | | +----------------------------------+ | | | | "Text.Blaze.Html5" | | | | +----------------------------------+ | | | | "Text.Blaze.Html.Renderer.Utf8" | | | | +----------------------------------+---------------------------------------+ | | | "Data.Aeson" | Building a JSON response body | +----+----------------------+----------------------------------+---------------------------------------+ | 10 | __Change__ | "Control.Concurrent.STM.TVar" | Shared state for request-handling | | | +----------------------------------+ threads | | | | "Control.Monad.STM" | | +----+----------------------+----------------------------------+---------------------------------------+ | 11 | __Streaming__ | | +----+----------------------+ | | 12 | __Request parsing__ | | +----+----------------------+ | | 13 | __Reading headers__ | | +----+----------------------+ The remaining chapters are in progress. | | 14 | __Body parsing__ | | +----+----------------------+ | | 15 | __Connection reuse__ | | +----+----------------------+ | | 16 | __Pipes__ | | +----+----------------------+--------------------------------------------------------------------------+ . == Libraries . Re-exported modules, grouped by the package that each module originally comes from: . __ascii__ - "ASCII", "ASCII.Char" . __aeson__ - "Data.Aeson" . __async__ - "Control.Concurrent.Async" . __base__ . * File handles - "System.IO" * Fundamental data types - "Data.Word", "Data.Int", "Data.Char" * Miscellania - "System.Timeout", "Control.Monad", "Data.Foldable", "Data.List" . __blaze-html__ - "Text.Blaze.Html", "Text.Blaze.Html5", "Text.Blaze.Html5.Attributes", "Text.Blaze.Html.Renderer.Utf8" . __bytestring__ . * Strict - "Data.ByteString" * Lazy - "Data.ByteString.Lazy" * Builder - "Data.ByteString.Builder" * "Data.ByteString.Char8" - This is included mostly to discuss why we don't use it. . __network__ . * "Network.Socket" - The Socket type, operations for opening and closing sockets * "Network.Socket.ByteString" - Socket read/write operations with strict byte strings * "Network.Socket.ByteString.Lazy" - Socket read/write operations with lazy byte strings . __safe-exceptions__ - "Control.Exception.Safe" . __stm__ - "Control.Monad.STM", "Control.Concurrent.STM.TVar" . __text__ . * Strict - "Data.Text", "Data.Text.Encoding", "Data.Text.IO" * Lazy - "Data.Text.Lazy", "Data.Text.Lazy.Encoding", "Data.Text.Lazy.IO" * Builder - "Data.Text.Lazy.Builder", "Data.Text.Lazy.Builder.Int" . __time__ - "Data.Time" source-repository head type: git location: git://github.com/joyofhaskell/sockets-and-pipes.git library default-language: Haskell2010 default-extensions: GADTs, NamedFieldPuns, NumericUnderscores ghc-options: -Wall hs-source-dirs: src exposed-modules: SocketsAndPipes.Serve other-modules: SocketsAndPipes.Serve.Setup SocketsAndPipes.Serve.Loop SocketsAndPipes.Serve.Sockets SocketsAndPipes.Serve.ForkBracket SocketsAndPipes.Serve.Exceptions build-depends: ascii ^>= 1.0 reexported-modules: ASCII, ASCII.Char build-depends: aeson ^>= 1.3 || ^>= 1.4 || ^>= 1.5 reexported-modules: Data.Aeson build-depends: async ^>= 2.2 reexported-modules: Control.Concurrent.Async build-depends: base ^>= 4.12 || ^>= 4.13 || ^>= 4.14 || ^>= 4.15 reexported-modules: Control.Monad, Data.Char, Data.Foldable, Data.Int, Data.List, Data.Word, System.IO, System.Timeout build-depends: blaze-html ^>= 0.9 reexported-modules: Text.Blaze.Html, Text.Blaze.Html5, Text.Blaze.Html5.Attributes, Text.Blaze.Html.Renderer.Utf8 build-depends: bytestring ^>= 0.10 -- -- Update to 0.11 is held back by: -- -- * https://github.com/jaspervdj/blaze-html/issues/135 -- reexported-modules: Data.ByteString, Data.ByteString.Builder, Data.ByteString.Char8, Data.ByteString.Lazy build-depends: containers ^>= 0.5.7 || ^>= 0.6 build-depends: network ^>= 3.1.2 -- -- Reasons for lower bounds: -- -- * 3.1.1 introduced the 'gracefulClose' function. -- * 3.1.1 series is deprecated due to flaw in 'gracefulClose'. -- * 3.1.2 introduced the 'openSocket' function. -- reexported-modules: Network.Socket, Network.Socket.ByteString, Network.Socket.ByteString.Lazy build-depends: safe-exceptions ^>= 0.1 reexported-modules: Control.Exception.Safe build-depends: stm ^>= 2.5 reexported-modules: Control.Concurrent.STM, Control.Concurrent.STM.TVar, Control.Monad.STM build-depends: text ^>= 1.2.3 -- -- Reasons for lower bounds: -- -- * 1.2.3 is the first version that works with base-4.12. -- reexported-modules: Data.Text, Data.Text.Encoding, Data.Text.Lazy, Data.Text.Lazy.Builder, Data.Text.Lazy.Builder.Int, Data.Text.Lazy.Encoding, Data.Text.Lazy.IO, Data.Text.IO build-depends: time ^>= 1.9 || ^>= 1.10 || ^>= 1.11 reexported-modules: Data.Time