Namespaced IO Layer

From HaskellWiki
Revision as of 22:03, 12 December 2010 by DimitryGolubovsky (talk | contribs) (Base Layer)
Jump to: navigation, search


The Haskell I/O library is based on the underlying Unix/Posix concepts, repeating its well-known design specifics and inconsistencies. The namespaced IO library provides an IO abstraction based on the ideas found in Plan 9 and Inferno, that is, to represent each IO capable resource as a virtual file server exposing a tree of files and directories, organizing those trees using per-process configurable namespaces.


Project summary (licensing, etc.):

Source code: under the io-layer directory.

Checkout: see (Mercurial repo)


Base Layer

This layer is represented by the Haskell (GHC) own IO library (the IO Monad). Handles provided by the standard library are used to perform actual IO operations.

Device Layer

This layer contains servers providing file operations to access the resources represented by the Base Layer. These operations are not directly available to applications.

Namespace Layer

This layer provides facilities to organize file systems presented by the Device Layer into per-process (thread) namespaces. Operations such as binding a file system to a namespace, and path evaluation are directly available to applications.

Application Layer

This layer implements streaming IO operations using the Iteratee concept.


This document as well as the library it describes are both work in progress and subject to changes of any unpredictable kind ;)