Namespaced IO Layer
(Putting the first draft together)
Revision as of 20:52, 12 December 2010
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.): http://code.google.com/p/hs-ogl-misc/
Source code: http://code.google.com/p/hs-ogl-misc/source/browse/ under the io-layer directory.
Checkout: see http://code.google.com/p/hs-ogl-misc/source/checkout (Mercurial repo)
3.1 Base Layer
This layer is represented by the Haskell (GHC) own IO library (the IO Monad). Handles provided by the library are used to perform actual IO operations.
3.2 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.
3.3 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.
3.4 Application Layer
This layer implements streaming IO operations using the Iteratee concept.
4 DRAFT! DRAFT! DRAFT!
This document as well as the library it describes are both work in progress and subject to changes of any unpredictable kind ;)