author:Neil-Mitchell
Library for manipulating FilePaths in a cross platform way.
This package provides functionality for manipulating
FilePath
values, and is shipped with
GHC. It provides two variants for
filepaths:
- legacy filepaths: type FilePath = String
- operating system abstracted filepaths (OsPath):
internally unpinned ShortByteString (platform-dependent
encoding)
It is recommended to use
OsPath when possible, because it is
more correct.
For each variant there are three main modules:
For more powerful string manipulation of
OsPath, you can use
the
os-string package (
OsPath is a type synonym for
OsString).
An introduction into the new API can be found in this
blog
post. Code examples for the new API can be found
here.
Library of safe (exception free) functions
A library wrapping
Prelude/
Data.List functions that
can throw exceptions, such as
head and
!!. Each
unsafe function has up to four variants, e.g. with
tail:
- tail :: [a] -> [a], raises an error on tail
[].
- tailMay :: [a] -> Maybe [a], turns errors into
Nothing.
- tailDef :: [a] -> [a] -> [a], takes a
default to return on errors.
- tailNote :: String -> [a] -> [a], takes an
extra argument which supplements the error message.
- tailSafe :: [a] -> [a], returns some sensible default
if possible, [] in the case of tail.
This package is divided into three modules:
- Safe contains safe variants of Prelude and
Data.List functions.
- Safe.Foldable contains safe variants of Foldable
functions.
- Safe.Exact creates crashing versions of functions like
zip (errors if the lists are not equal) and take
(errors if there are not enough elements), then wraps them to provide
safe variants.
Extra functions I use.
A library of extra functions for the standard Haskell libraries. Most
functions are simple additions, filling out missing functionality. A
few functions are available in later versions of GHC, but this package
makes them available back to GHC 7.2.
The module
Extra documents all functions provided by this
library. Modules such as
Data.List.Extra provide extra
functions over
Data.List and also reexport
Data.List.
Users are recommended to replace
Data.List imports with
Data.List.Extra if they need the extra functionality.
Command line argument processing
This library provides an easy way to define command line parsers. Most
users will want to use the
System.Console.CmdArgs.Implicit
module, whose documentation contains an example.
- System.Console.CmdArgs.Explicit provides a way to write
command line parsers for both single mode programs (most programs) and
multiple mode programs (e.g. darcs or cabal). Parsers are defined by
constructing a data structure.
- System.Console.CmdArgs.Implicit provides a way to concisely
define command line parsers, up to three times shorter than getopt.
These parsers are translated into the Explicit data type.
- System.Console.CmdArgs.GetOpt provides a wrapper allowing
compatiblity with existing getopt parsers, mapping to the Explicit
data type.
For a general reference on what command line flags are commonly used,
see
http://www.faqs.org/docs/artu/ch10s05.html.
Parsing and extracting information from (possibly malformed) HTML/XML documents
TagSoup is a library for parsing HTML/XML. It supports the HTML 5
specification, and can be used to parse either well-formed XML, or
unstructured and malformed HTML from the web. The library also
provides useful functions to extract information from an HTML
document, making it ideal for screen-scraping.
Users should start from the
Text.HTML.TagSoup module.
Source code suggestions
HLint gives suggestions on how to improve your source code.
Help writing simple, concise and fast generic operations.
Uniplate is library for writing simple and concise generic operations.
Uniplate has similar goals to the original Scrap Your Boilerplate
work, but is substantially simpler and faster.
To get started with Uniplate you should import one of the three
following modules:
In addition, some users may want to make use of the following modules:
Not on Stackage, so not searched.
A program and library to derive instances for data types
Build system library, like Make, but more accurate dependencies.
Shake is a Haskell library for writing build systems - designed as a
replacement for
make. See
Development.Shake for an
introduction, including an example. The homepage contains links to a
user manual, an academic paper and further information:
https://shakebuild.com
To use Shake the user writes a Haskell program that imports
Development.Shake, defines some build rules, and calls the
Development.Shake.shakeArgs function. Thanks to do notation and
infix operators, a simple Shake build system is not too dissimilar
from a simple Makefile. However, as build systems get more complex,
Shake is able to take advantage of the excellent abstraction
facilities offered by Haskell and easily support much larger projects.
The Shake library provides all the standard features available in
other build systems, including automatic parallelism and minimal
rebuilds. Shake also provides more accurate dependency tracking,
including seamless support for generated files, and dependencies on
system information (e.g. compiler version).
Combinators for executing IO actions in parallel on a thread pool.
This package provides combinators for sequencing IO actions onto a
thread pool. The thread pool is guaranteed to contain no more
unblocked threads than a user-specified upper limit, thus minimizing
contention.
Furthermore, the parallel combinators can be used reentrantly - your
parallel actions can spawn more parallel actions - without violating
this property of the thread pool.
The package is inspired by the thread
http://thread.gmane.org/gmane.comp.lang.haskell.cafe/56499/focus=56521.
Thanks to Neil Mitchell and Bulat Ziganshin for some of the code this
package is based on.
File path glob-like matching
A library for matching files using patterns such as
"src/**/*.png" for all
.png files recursively under
the
src directory. Features:
- All matching is O(n). Most functions precompute some
information given only one argument.
- See System.FilePattern and ?== simple matching and
semantics.
- Use match and substitute to extract suitable
strings from the * and ** matches, and substitute
them back into other patterns.
- Use step and matchMany to perform bulk matching
of many patterns against many paths simultaneously.
- Use System.FilePattern.Directory to perform optimised
directory traverals using patterns.
Originally taken from the
Shake library.
A tiling window manager
xmonad is a tiling window manager for X. Windows are arranged
automatically to tile the screen without gaps or overlap, maximising
screen use. All features of the window manager are accessible from the
keyboard: a mouse is strictly optional. xmonad is written and
extensible in Haskell. Custom layout algorithms, and other extensions,
may be written by the user in config files. Layouts are applied
dynamically, and different layouts may be used on each workspace.
Xinerama is fully supported, allowing windows to be tiled on several
screens.
Obtain minified jQuery code
This package bundles the minified
jQuery code into a Haskell
package, so it can be depended upon by Cabal packages. The first three
components of the version number match the upstream jQuery version.
The package is designed to meet the redistribution requirements of
downstream users (e.g. Debian).
Library for manipulating RawFilePaths in a cross platform way.
This package provides functionality for manipulating
RawFilePath values. It can be used as a drop in replacement
for the filepath library to get the benefits of using ByteStrings. It
provides three modules:
All three modules provide the same API, and the same documentation
(calling out differences in the different variants).
This package is now deprecated, since filepath 1.4.100.0 provides an
OsPath type that is based on a bytestring. See
https:/
hasufell.github.ioposts/2022-06-29-fixing-haskell-filepaths.html
Haskell API Search
Hoogle is a Haskell API search engine, which allows you to search many
standard Haskell libraries by either function name, or by approximate
type signature.
GHCi based bare bones IDE
Either "GHCi as a daemon" or "GHC + a bit of an IDE". A very simple
Haskell development tool which shows you the errors in your project
and updates them whenever you save. Run ghcid --topmost
--command=ghci, where --topmost makes the window on top
of all others (Windows only) and --command is the command to
start GHCi on your project (defaults to ghci if you have a
.ghci file, or else to cabal repl).
A version of GHC.Records as available in future GHCs.
This package provides a version of
GHC.Records as it will be
after the implementation of
GHC proposal #42, plus some helper
functions over it.
XML subset DOM parser
An XML DOM-style parser, that only parses a subset of XML, but is
designed to be fast.
Obtain minified jquery.dgtable code
This package bundles the minified
jquery.dgtable code into a
Haskell package, so it can be depended upon by Cabal packages. The
first three components of the version number match the upstream
jquery.dgtable version. The package is designed to meet the
redistribution requirements of downstream users (e.g. Debian).
Obtain minified flot code
This package bundles the minified
Flot code (a jQuery plotting
library) into a Haskell package, so it can be depended upon by Cabal
packages. The first three components of the version number match the
upstream flot version. The package is designed to meet the
redistribution requirements of downstream users (e.g. Debian).
Preprocessor to allow record.field syntax
In almost every programming language a.b will get the
b field from the a data type, and many different
data types can have a b field. The reason this feature is
ubiquitous is because it's useful. The
record-dot-preprocessor brings this feature to Haskell - see
the README for full details.
Not on Stackage, so not searched.
Yhc's Internal Core language.
Not on Stackage, so not searched.
Library for safe (pattern match free) functions
Not on Stackage, so not searched.
Build Systems à la Carte
Not on Stackage, so not searched.
Conveniently run shell commands