Personal tools

Applications and libraries/Operating system

From HaskellWiki

< Applications and libraries(Difference between revisions)
Jump to: navigation, search
(fmt)
Line 5: Line 5:
 
__TOC__
 
__TOC__
   
== Standalone implementations of operating systems in Haskell ==
+
== Applications ==
  +
  +
=== Standalone operating systems ===
   
 
;[http://www.cse.ogi.edu/~hallgren/House/ House]
 
;[http://www.cse.ogi.edu/~hallgren/House/ House]
 
:House is a platform for exploring various ideas relating to low-level and system-level programming in a high-level functional language, or in short for building operating systems in Haskell.
 
:House is a platform for exploring various ideas relating to low-level and system-level programming in a high-level functional language, or in short for building operating systems in Haskell.
   
== Filesystems ==
+
=== Filesystems ===
   
 
;[http://www.haskell.org/halfs/ Halfs, the Haskell Filesystem]
 
;[http://www.haskell.org/halfs/ Halfs, the Haskell Filesystem]
 
:Halfs is a filesystem implemented in Haskell. Halfs can be mounted and used like any other Linux filesystem, or used as a library.
 
:Halfs is a filesystem implemented in Haskell. Halfs can be mounted and used like any other Linux filesystem, or used as a library.
 
;[http://abridgegame.org/repos/fuse_example Fuse]
 
:David Roundy's combination of a nice DarcsIO-style filesystem interface on the Haskell side (called FuseIO) with an interface to libfuse (which is a library for creating filesystems from user space on linux).
 
 
;[http://cvs.haskell.org/darcs/hfuse/ hfuse]
 
:Jeremy Bobbio's fuse bindings
 
   
 
;[http://okmij.org/ftp/Computation/Continuations.html#zipper-fs ZipperFS]
 
;[http://okmij.org/ftp/Computation/Continuations.html#zipper-fs ZipperFS]
Line 27: Line 21:
 
:A single, full debian rescue CD. The tool that generates these ISO images (dfsbuild) is written in Haskell.
 
:A single, full debian rescue CD. The tool that generates these ISO images (dfsbuild) is written in Haskell.
   
;[http://haskell.org/~kolmodin/code/hinotify/ hinotify]
+
=== Hardware emulators ===
:A library binding to [http://www.kernel.org/pub/linux/kernel/people/rml/inotify/ inotify], providing file system event notification, by simply add a watcher to a file or directory and get an event when it is accessed or modified.
 
 
== Hardware emulators ==
 
   
 
;[http://www.mutantlemon.com/omegagb/ OmegaDB]
 
;[http://www.mutantlemon.com/omegagb/ OmegaDB]
 
:OmegaGB is a Nintendo Game Boy emulator written in Haskell.
 
:OmegaGB is a Nintendo Game Boy emulator written in Haskell.
   
== Dynamic linking ==
+
=== Shell utilities ===
  +
  +
;[http://web.comlab.ox.ac.uk/oucl/work/ian.lynagh/haskell-ls/ haskell-ls]
  +
:A (near-)clone of the GNU ls utility.
  +
  +
;[http://www.cse.unsw.edu.au/~dons/h4sh.html h4sh]
  +
:h4sh provides a set of Haskell List functions as normal unix shell commands. This allows us to use Haskell in shell scripts transparently. Each program is generated from the corresponding Haskell function's type
  +
  +
=== Package Management ===
  +
  +
;[http://www.arjox.org/himerge.html hImerge]
  +
:Luis Araujo's Haskell gui frontend to Emerge
  +
  +
== Libraries ==
  +
  +
=== Filesystems ===
  +
  +
;[http://abridgegame.org/repos/fuse_example Fuse]
  +
:David Roundy's combination of a nice DarcsIO-style filesystem interface on the Haskell side (called FuseIO) with an interface to libfuse (which is a library for creating filesystems from user space on linux).
  +
  +
;[http://cvs.haskell.org/darcs/hfuse/ hfuse]
  +
:Jeremy Bobbio's fuse bindings
  +
  +
;[http://haskell.org/~kolmodin/code/hinotify/ hinotify]
  +
:A library binding to [http://www.kernel.org/pub/linux/kernel/people/rml/inotify/ inotify], providing file system event notification, by simply add a watcher to a file or directory and get an event when it is accessed or modified.
  +
  +
=== Dynamic linking ===
   
 
;[http://www.cse.unsw.edu.au/~dons/hs-plugins hs-plugins]
 
;[http://www.cse.unsw.edu.au/~dons/hs-plugins hs-plugins]
 
:Library support for dynamically loading Haskell modules, as well as compiling source or ''eval'' code fragments at runtime.
 
:Library support for dynamically loading Haskell modules, as well as compiling source or ''eval'' code fragments at runtime.
   
== Processes ==
+
=== Processes ===
   
 
;[http://www.haskell.org/~petersen/haskell/popenhs/ popenhs]
 
;[http://www.haskell.org/~petersen/haskell/popenhs/ popenhs]
Line 47: Line 41:
 
See also [[Libraries_and_tools/Concurrency_and_parallelism]]
 
See also [[Libraries_and_tools/Concurrency_and_parallelism]]
   
== Environment ==
+
=== Environment ===
   
 
;[http://repetae.net/john/recent/out/GetOptions.html GetOptions]
 
;[http://repetae.net/john/recent/out/GetOptions.html GetOptions]
 
:This module provides an advanced option parsing routine which can properly parse options depending on what types are infered for them as well as produce a pretty error message with usage info when an incorrect option is used.
 
:This module provides an advanced option parsing routine which can properly parse options depending on what types are infered for them as well as produce a pretty error message with usage info when an incorrect option is used.
   
== Time ==
+
=== Time ===
   
 
;[http://semantic.org/TimeLib/ TimeLib]
 
;[http://semantic.org/TimeLib/ TimeLib]
Line 60: Line 54:
 
:ParseDate provides a function for parsing dates and times given a date format string.
 
:ParseDate provides a function for parsing dates and times given a date format string.
   
== Shell ==
+
=== Shell ===
   
=== Link collections on pure functional shells ===
+
==== Haskell shell examples ====
 
* [http://lambda-the-ultimate.org/classic/message9846.html on Lambda the Ultimate]
 
* [http://www.cse.unsw.edu.au/~pls/thesis-topics/functionalshell.html Thesis Topic: The Design and Implementation of a Functional Shell]
 
 
=== Haskell shell examples ===
 
   
 
;[http://www.volker-wysk.de/hsshellscript HsShellScript]
 
;[http://www.volker-wysk.de/hsshellscript HsShellScript]
Line 89: Line 83:
 
* Pure Haskell functions are as much a first-class citizen as is grep or cat
 
* Pure Haskell functions are as much a first-class citizen as is grep or cat
   
== Shell utilities ==
+
==== Link collections on pure functional shells ====
   
;[http://web.comlab.ox.ac.uk/oucl/work/ian.lynagh/haskell-ls/ haskell-ls]
+
* [http://lambda-the-ultimate.org/classic/message9846.html on Lambda the Ultimate]
:A (near-)clone of the GNU ls utility.
+
* [http://www.cse.unsw.edu.au/~pls/thesis-topics/functionalshell.html Thesis Topic: The Design and Implementation of a Functional Shell]
 
;[http://www.cse.unsw.edu.au/~dons/h4sh.html h4sh]
 
:h4sh provides a set of Haskell List functions as normal unix shell commands. This allows us to use Haskell in shell scripts transparently. Each program is generated from the corresponding Haskell function's type
 
 
== Package Management ==
 
 
;[http://www.arjox.org/himerge.html hImerge]
 
:Luis Araujo's Haskell gui frontend to Emerge
 
   
== File utilities ==
+
=== File utilities ===
   
 
;[http://quux.org/devel/magic-haskell magic-haskell]
 
;[http://quux.org/devel/magic-haskell magic-haskell]
Line 105: Line 99:
 
:Koen Claessen's binding to common unix functions.
 
:Koen Claessen's binding to common unix functions.
   
== Logging ==
+
=== Logging ===
   
 
;[http://repetae.net/john/recent/out/ErrorLog.html ErrorLog]
 
;[http://repetae.net/john/recent/out/ErrorLog.html ErrorLog]
Line 113: Line 107:
 
:Multiple debug levels and log file support
 
:Multiple debug levels and log file support
   
24 entries.
+
{{LibrariesPage}}

Revision as of 03:08, 6 December 2006

Operating Systems and Systems Programming

See also research papers on this topic.

Contents


1 Applications

1.1 Standalone operating systems

House
House is a platform for exploring various ideas relating to low-level and system-level programming in a high-level functional language, or in short for building operating systems in Haskell.

1.2 Filesystems

Halfs, the Haskell Filesystem
Halfs is a filesystem implemented in Haskell. Halfs can be mounted and used like any other Linux filesystem, or used as a library.
ZipperFS
Oleg Kiselyov's file server/OS where threading and exceptions are all realized via delimited continuations.
Debian From Scratch
A single, full debian rescue CD. The tool that generates these ISO images (dfsbuild) is written in Haskell.

1.3 Hardware emulators

OmegaDB
OmegaGB is a Nintendo Game Boy emulator written in Haskell.

1.4 Shell utilities

haskell-ls
A (near-)clone of the GNU ls utility.
h4sh
h4sh provides a set of Haskell List functions as normal unix shell commands. This allows us to use Haskell in shell scripts transparently. Each program is generated from the corresponding Haskell function's type

1.5 Package Management

hImerge
Luis Araujo's Haskell gui frontend to Emerge

2 Libraries

2.1 Filesystems

Fuse
David Roundy's combination of a nice DarcsIO-style filesystem interface on the Haskell side (called FuseIO) with an interface to libfuse (which is a library for creating filesystems from user space on linux).
hfuse
Jeremy Bobbio's fuse bindings
hinotify
A library binding to inotify, providing file system event notification, by simply add a watcher to a file or directory and get an event when it is accessed or modified.

2.2 Dynamic linking

hs-plugins
Library support for dynamically loading Haskell modules, as well as compiling source or eval code fragments at runtime.

2.3 Processes

popenhs
A small library, based on runProcess in the standardised posix library. It provides lazy output from subprocesses.
Process
Process is a fun library for easing decomposition of algorithms to several processes, which transmit intermediate data via Unix-like pipes. Each sub-process is just a function started with forkIO/forkOS with one additional parameter-pipe.

See also Libraries_and_tools/Concurrency_and_parallelism

2.4 Environment

GetOptions
This module provides an advanced option parsing routine which can properly parse options depending on what types are infered for them as well as produce a pretty error message with usage info when an incorrect option is used.

2.5 Time

TimeLib
TimeLib is an attempt to redesign the current library for handling time (System.Time), balancing expressive functionality and intelligible simplicity. Now at version 0.2, TimeLib features representation of TAI, UTC and UT1, as well as Gregorian, ISO 8601 week, and "year and day" calendars, time-zones, and functions for strftime-style formatting. We'd like to collect some additional documentation on this wiki, too: Libraries_and_tools/TimeLibrary
ParseDate
ParseDate provides a function for parsing dates and times given a date format string.

2.6 Shell

2.6.1 Haskell shell examples

HsShellScript
A library for using Haskell for tasks which are usually done by shell scripts, e.g. command line parsing, analysing paths, etc. It can be used also for tasks usually done GetOpt (a module for GNU-/POSIX-like option handling of commandline arguments). But also for many other things.
Jim Mattson's Hsh Haskell shell
on the software page by Ralf Hinze. Hsh seems to be written in Haskell 1.3.
HaSh
a nascent project page on a shell scripting system
Monadic i/o and UNIX shell programming
UNIX pipes as IO monads.
shell-haskell
start an external shell command asynchronously, write data to its standard input and read results from its standard output. There is a Darcs repository with a cabalized version.
hashell
shell with some scripting capabilities to use Haskell as a scripting language.
Haskell Shell (HSH)
HSH, the Haskell shell. Things are still very preliminary in many ways, but this version already lets you:
  • Run commands
  • Pipe things between commands
  • Pipe command input/output into and out of pure Haskell functions
  • Pure Haskell functions are as much a first-class citizen as is grep or cat

2.6.2 Link collections on pure functional shells

2.7 File utilities

magic-haskell
magic-haskell is a binding to the libmagic library. With magic-haskell, you can determine the type of a file by looking at its contents rather than its name. This library also can yield the MIME type of a file by looking at its contents.
mkstemps
A Haskell reimplementation of the C mktemp/mkstemp/mkstemps library from OpenBSD
Unix.hs
Koen Claessen's binding to common unix functions.

2.8 Logging

ErrorLog
Manages an error log with proper locking. has a number of useful routines for detecting and reporting erronious conditions.
Logging
Multiple debug levels and log file support

This page contains a list of libraries and tools in a certain category. For a comprehensive list of such pages, see Libraries and tools.