sockets-and-pipes-0.3: src/SocketsAndPipes/Syllabus.hs
module SocketsAndPipes.Syllabus
(
-- * Chapters
-- $chapters
-- * Libraries
-- $libraries
)
where
import Prelude ()
import qualified ASCII as A
import qualified Control.Concurrent as Concurrent
import qualified Control.Concurrent.Async as Async
import qualified Control.Concurrent.STM as STM
import qualified Control.Monad.Trans.Resource as Resource
import qualified Data.ByteString as BS
import qualified Data.ByteString.Builder as BSB
import qualified Data.Text as T
import qualified Data.Text.Lazy.Builder as TB
import qualified Data.Time as Time
import qualified Network.Simple.TCP as Net
import qualified Prelude
{- $chapters
List of modules that make a significant appearance in each chapter:
__Setup__
* "Relude" - Alternate prelude that includes a lot of standard utilities
* "System.Directory", "System.FilePath" - Determining where our data files should go
__1 - Handles__
* "System.IO" - Writing to a file
* "Control.Monad.Trans.Resource" - Using 'Resource.allocate' to ensure that file handles are closed
__2 - Chunks__
* "Data.Text" - 'T.Text' is a chunk of characters
* "Data.Text.IO" - Reading and writing files using 'T.Text' instead of 'Prelude.String'
__3 - Bytes__
* "Data.ByteString" - 'BS.ByteString' is a chunk of bytes
* "Data.Text.Encoding" - Conversions between 'BS.ByteString' and 'T.Text'
__4 - Sockets__
* "Network.Socket" - Opening and closing sockets, resolving network addresses
* "Network.Socket.ByteString" - Writing to and reading from sockets
__5 - HTTP__
* "ASCII", "ASCII.Char" - Expressing HTTP messages as strings using the 'A.string' quasi-quoter
* "Network.Simple.TCP" - Listening for client connections using 'Net.serve'
__6 - HTTP types__
* "ASCII.Decimal", "Data.ByteString.Lazy" - Defining datatypes for the parts of an HTTP message
__7 - Encoding__
* "Data.Text.Lazy", "Data.Text.Lazy.Builder" - Efficient text concatenations with 'TB.Builder'
* "Data.ByteString.Lazy", "Data.ByteString.Builder" - Efficient byte string concatenations with 'BSB.Builder'
* "Data.Time" - Simple performance testing with 'Time.getCurrentTime' and 'Time.diffUTCTime'
__8 - Responding__
* No additional imports in this chapter
__9 - Content types__
* "Data.Text.Lazy.Builder.Int", "Data.Text.Lazy.IO", "Data.Text.Lazy.Encoding" - Building a text response body
* "Text.Blaze.Html", "Text.Blaze.Html5", "Text.Blaze.Html.Renderer.Utf8" - Building an HTML response body
* "Data.Aeson", "Data.Aeson.Key", "Data.Aeson.KeyMap" - Building a JSON response body
__10 - Change__
* "Control.Concurrent.STM" - Shared 'STM.TVar' state for request-handling threads
* "Control.Concurrent.Async" - Demonstrating thread safety with 'Async.replicateConcurrently_'
__11 - Streaming__
* "Control.Concurrent" - Slowing things down with 'Concurrent.threadDelay'
__12 - ListT IO__
* "List.Transformer" - Representing files and chunked HTTP message bodies as I/O streams
__13 - Parsing__
* "Data.Map.Strict" - Mapping resource names to file paths
* "Data.Attoparsec.ByteString" - Parsing HTTP requests
__14 - Errors__
* "Unfork" - Thread-safe logging
The remaining chapters are in progress:
__15 - Reading the head__
__16 - Reading the body__
__17 - Connection reuse__
-}
{- $libraries
Re-exported modules, grouped by the package that each module originally comes from:
__ascii__ - "ASCII", "ASCII.Char", "ASCII.Decimal"
__aeson__ - "Data.Aeson", "Data.Aeson.Key", "Data.Aeson.KeyMap"
__async__ - "Control.Concurrent.Async"
__base__
* File handles - "System.IO"
* Fundamental data types - "Data.Char"
* Miscellanea - "Control.Concurrent", "Control.Monad"
__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" - To discuss why we don't use it
__containers__ - "Data.Map.Strict"
__directory__ - "System.Directory"
__filepath__ - "System.FilePath"
__list-transformer__ - "List.Transformer"
__network__
* "Network.Socket" - The Socket type, operations for opening and closing sockets
* "Network.Socket.ByteString" - Socket read/write operations with strict byte strings
__network-simple__
* "Network.Simple.TCP" - Sockets that listen for incoming client connections
__relude__ - "Relude"
__resourcet__ - "Control.Monad.Trans.Resource"
__safe-exceptions__ - "Control.Exception.Safe"
__stm__ - "Control.Monad.STM", "Control.Concurrent.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"
__unfork__ - "Unfork"
-}