Index by title

This page attempts to document major changes to the MissingH API over version changes.

Old Module Dep Ver Change Ver New Location
The Great Renaming . 0.18.0 See TransitionPlanning
MissingH.AnyDBM.* . 0.18.0 Split off into anydbm
MissingH.AnyDBM.FiniteMapDBM 0.13.0 0.16.0 None; FiniteMap removed from std lib (use MapDBM)
MissingH.BlockIO . 0.18.0 Use upstream
MissingH.ConfigParser.* . 0.18.0 Split off into configfile
MissingH.Email.Parser . 0.18.0 Use FlattenMessage
MissingH.FiniteMap 0.13.0 0.16.0 None; FiniteMap removed from std lib
MissingH.Hsemail . 0.18.0 Use upstream
MissingH.Logging . 0.18.0 Split off into hslogger
MissingH.Network.FTP.* . 0.18.0 Split off into ftphs
MissingH.Path.FilePath . 0.18.0 Use upstream haskell-filepath
MissingH.Printf 0.13.0 0.16.0 None (use new standard Text.Printf instead)
MissingH.Threads.Child . 0.18.0 Use upstream
MissingH.Threads.Timeout . 0.18.0 Use upstream
MissingH.Str.{subRe,splitRe} 0.13.0 0.18.0 These functions integrated into regex-compat
MissingH.Wash.* . 0.18.0 Use upstream

This module used to have one function:

{- | Given a 'Network.Email.Message.Message' object, \"flatten\" 
it into a simple, non-hierarchical list of its component single parts.

Data associated with a multipart will be lost, but each single child component
of the multipart will be preserved.
-}
flattenMessage :: Network.Email.Message.Message ->
                  [Network.Email.Message.Message]
flattenMessage x =
    case x of
       y@(Network.Email.Message.Singlepart {}) -> [y]
       y@(Network.Email.Message.Multipart {}) ->
           concatMap flattenMessage (Network.Email.Message.getParts y)

The modules were from WASH, so this is probably best sent back to WASH.


InterMapTxt

This is the place for defining InterWiki prefixes

This page was modelled after the MeatBall:InterMapTxt page.
In addition, an optional comment is allowed after the mapping.

This page is interpreted in a special way by Trac, in order to support
InterWiki links in a flexible and dynamic way.

The code block after the first line separator in this page
will be interpreted as a list of InterWiki specifications:
prefix <space> URL [<space> # comment]

By using $1, $2, etc. within the URL, it is possible to create
InterWiki links which support multiple arguments, e.g. Trac:ticket:40.
The URL itself can be optionally followed by a comment,
which will subsequently be used for decorating the links
using that prefix.

New InterWiki links can be created by adding to that list, in real time.
Note however that deletions are also taken into account immediately,
so it may be better to use comments for disabling prefixes.

Also note that InterWiki prefixes are case insensitive.

List of Active Prefixes

InterWiki


Prefix Definitions

PEP     http://www.python.org/peps/pep-$1.html                                       # Python Enhancement Proposal 
Trac-ML  http://thread.gmane.org/gmane.comp.version-control.subversion.trac.general/ # Message $1 in Trac Mailing List
trac-dev http://thread.gmane.org/gmane.comp.version-control.subversion.trac.devel/   # Message $1 in Trac Development Mailing List

Mercurial http://www.selenic.com/mercurial/wiki/index.cgi/ # the wiki for the Mercurial distributed SCM
RFC       http://rfc.net/rfc$1.html # IETF's RFC $1

#
# A arbitrary pick of InterWiki prefixes...
#
Acronym          http://www.acronymfinder.com/af-query.asp?String=exact&Acronym=
C2find           http://c2.com/cgi/wiki?FindPage&value=
Cache            http://www.google.com/search?q=cache:
CPAN             http://search.cpan.org/perldoc?
DebianBug        http://bugs.debian.org/
DebianPackage    http://packages.debian.org/
Dictionary       http://www.dict.org/bin/Dict?Database=*&Form=Dict1&Strategy=*&Query=
Google           http://www.google.com/search?q=
GoogleGroups     http://groups.google.com/group/$1/msg/$2        # Message $2 in $1 Google Group
JargonFile       http://downlode.org/perl/jargon-redirect.cgi?term=
MeatBall         http://www.usemod.com/cgi-bin/mb.pl?
MetaWiki         http://sunir.org/apps/meta.pl?
MetaWikiPedia    http://meta.wikipedia.org/wiki/
MoinMoin         http://moinmoin.wikiwikiweb.de/
WhoIs            http://www.whois.sc/
Why              http://clublet.com/c/c/why?
c2Wiki             http://c2.com/cgi/wiki?
WikiPedia        http://en.wikipedia.org/wiki/

InterTrac Links

Trac supports a convenient way to refer to resources of other Trac servers, from within the Wiki markup, since version 0.10.

Definitions

An InterTrac link can be seen as a scoped TracLinks.
It is used for referring to a Trac resource
(Wiki page, changeset, ticket, ...) located in another
Trac environment.

List of Active InterTrac Prefixes

InterTrac

Link Syntax

Simply use the name of the other Trac environment as a prefix,
followed by a colon, ending with the resource located in the other environment.

<target_environment>:<TracLinks>

The other resource is specified using a regular TracLinks, of any flavor.

That target environment name is either the real name of the
environment, or an alias for it.
The aliases are defined in trac.ini (see below).
The prefix is case insensitive.

For convenience, there's also some alternative short-hand form,
where one can use an alias as an immediate prefix
for the identifier of a ticket, changeset or report:
(e.g. #T234, [T1508], [trac 1508], ...)

Examples

#!comment
 Besides the other environments run by the same server process
 (called _sibling_ environments), which are automatically detected,
Support for sibling environments has been disabled.
See http://thread.gmane.org/gmane.comp.version-control.subversion.trac.devel/157

It is necessary to setup a configuration for the InterTrac facility.
This configuration has to be done in the TracIni file, [intertrac] section.

Example configuration:
...
[intertrac]
# -- Example of setting up an alias:
t = trac

# -- Link to an external Trac:
trac.title = Edgewall's Trac for Trac
trac.url = http://projects.edgewall.com/trac
trac.compat = false

The .url is mandatory and is used for locating the other Trac.
This can be a relative URL in case that Trac environment is located
on the same server.

The .title information will be used for providing an useful tooltip
when moving the cursor over an InterTrac links.

Finally, the .compat option can be used to activate or disable
a compatbility mode: Now, given the above configuration, one could create the following links:

The generic form intertrac_prefix:module:id is translated
to the corresponding URL &lt;remote&gt;/module/id, shorthand links
are specific to some modules (e.g. !#T234 is processed by the
ticket module) and for the rest (intertrac_prefix:something),
we rely on the TracSearch#quickjump facility of the remote Trac.


Discussion

I think that the trac prefix could even be set as a default in the [intertrac] TracIni section. --CB

----
See also: TracLinks, InterWiki


Support for InterWiki links

(since [milestone:0.10])

Definition

An InterWiki link can be used for referring to a Wiki page
located in another Wiki system, and by extension, to any object
located in any other Web application, provided a simple URL
mapping can be done.

At the extreme, InterWiki prefixes can even be used to simply introduce
links to new protocols, such as tsvn: used by TortoiseSvn.

Link Syntax

<target_wiki>(:<identifier>)+

The link is composed by the targeted Wiki (or system) name,
followed by a colon (e.g. MeatBall:),
followed by a page specification in the target.
Note that, as for InterTrac prefixes, InterWiki prefixes are case insensitive.

The target Wiki URL is looked up in the InterMapTxt wiki page,
modelled after MeatBall:InterMapTxt.

In addition to traditional InterWiki links, where the target
is simply appended to the URL,
Trac supports parametric InterWiki URLs:
identifiers $1, $2, ... in the URL
will be replaced by corresponding arguments.
The argument list is formed by splitting the page identifier
using the ":" separator.

Examples

If the following is an excerpt of the InterMapTxt page:


h1. InterMapTxt =
 This is the place for defining InterWiki prefixes ==

Currently active prefixes: InterWiki

This page is modelled after the MeatBall:InterMapTxt page.
In addition, an optional comment is allowed after the mapping.
----
<pre>
PEP      http://www.python.org/peps/pep-$1.html           # Python Enhancement Proposal $1 
Trac-ML  http://thread.gmane.org/gmane.comp.version-control.subversion.trac.general/$1  # Message $1 in Trac Mailing List

tsvn     tsvn:                                            # Interact with TortoiseSvn
...
MeatBall http://www.usemod.com/cgi-bin/mb.pl?
MetaWiki http://sunir.org/apps/meta.pl?
MetaWikiPedia http://meta.wikipedia.org/wiki/
MoinMoin http://moinmoin.wikiwikiweb.de/
...
</pre>
Then,

----
See also: InterTrac, InterMapTxt



In order to get Profiling Support for MissingH, you need to compile MissingH with profiling support. This option can be enabled in the configure state, so when building MissingH, you should take the following steps:

./setup configure -p
./setup build
./setup install

The difference with normal compilation is that you add the -p option to the configure step. This step will probably complain that profiling for some prerequisites are missing, and you should (re)compile them again, with the same option during the configure step.


Recent Changes

RecentChanges


Software Related to MissingH

Software Related to MissingHProjects Using MissingHMissingH PrerequisitesCompilers / InterpretersRequired LibrariesSoftware Split From MissingHSoftware Incorporated Into MissingHSoftware Previously Incorporated Into MissingH

Projects Using MissingH

See UserList.

MissingH Prerequisites

These programs are required to build or use MissingH.

Compilers / Interpreters

You need one of these.

Program Min. Ver. Supported Platforms
GHC 6.8 (older MissingH versions support 6.6) Linux/Unix/Posix, Windows
Hugs 2005xx Linux/Unix/Posix only. Also requires cpphs.

Required Libraries

You need all of these to build MissingH.

Many of these are available in the GHC extralibs collection. Some packages are included with Hugs and thus are only required with GHC.

These packages are conveniently assembled into a prereqpack that is distributed alongside MissingH in the downloads downloads area.

Update: Hackage makes it very easy to obtain the needed libraries these days!

Library Req on GHC Req on Hugs Download Locations
FilePath Yes Yes project homepage
hslogger Yes Yes hslogger
HUnit Yes Yes extralibs, hackage
mtl Yes No extralibs, hackage
regex-compat No No extralibs, hackage
QuickCheck Yes No extralibs, hackage

Software Split From MissingH

These programs were originally written for MissingH. Because they grew and became essentially self-contained libraries, they were split off into independent packages.

Package MissingH Module Removed In Ver.
hslogger MissingH.Logging.* 0.18
ftphs MissingH.Network.FTP.* 0.18
anydbm MissingH.AnyDBM.* 0.18
configfile MissingH.ConfigParser.* 0.18

Software Incorporated Into MissingH

These projects are included, in whole or part, in MissingH.

Library MissingH Module
HsShellScript 2.1.0 Parts of System.Path
crc32 Data.Hash.CRC32.Posix
Inflate Data.Compression.Inflate
MD5 Data.Hash.MD5*
ParseDate System.Time.Utils.ParseDate
Pesco's Regex Text.Regex.!PerlOps

Software Previously Incorporated Into MissingH

See ApiChanges.


The Sandbox

This is just a page to practice and learn WikiFormatting.

Go ahead, edit it freely.


Viewing Revision Logs

TracGuideToc

When you browse the repository, it's always possible to query the
Revision Log view corresponding to the path you're currently seeing.
This will display a list of the most recent changesets in which the
current path or any other path below it has been modified.

The Revision Log Form

It's possible to set the revision at which the revision log should
start, using the View log starting at field. An empty value
or a value of head is taken to be the newest changeset.

It's also possible to specify the revision at which the log should
stop, using the back to field. By default, it's left empty,
which means the revision log will stop as soon as 100 revisions have
been listed.

Also, there are three modes of operation of the revision log.

By default, the revision log stops on copy, which means that
whenever an Add, Copy or Rename operation is detected,
no older revision will be shown. That's very convenient when working
with branches, as one only sees the history corresponding to what
has been done on the branch.

It's also possible to indicate that one wants to see what happened
before a Copy or Rename change, by selecting the
Follow copies mode. This will cross all copies or renames changes.
Each time the name of the path changes, there will be an additional
indentation level. That way, the changes on the different paths
are easily grouped together visually.

It's even possible to go past an Add change, in order to see
if there has been a Delete change on that path, before
that Add. This mode corresponds to the mode called
Show only adds, moves and deletes.
While quite useful at times, be aware that this operation is quite
resource intensive.

Finally, there's also a checkbox Show full log messages,
which controls whether the full content of the commit log message
should be displayed for each change, or only a shortened version of it.

The Revision Log Information

For each revision log entry, there are 7 columns shown:
1. The first column contains a pair of radio buttons and should used
for selecting the old and the new revisions that will be
used for TracRevisionLog#viewingtheactualchanges.
2. A color code (similar to the one used for the TracChangeset#ChangesetHeader)
indicating kind of change.
Clicking on this column refreshes the revision log so that it restarts
with this change.
3. The Date at which the change was made.
4. The Revision number, displayed as @xyz.
This is a link to the TracBrowser, using that revision as the base line.
5. The Changeset number, displayed as [xyz].
This is a link to the TracChangeset view.
6. The Author of the change.
7. The Log Message, which contains either a summary or the full commit
log message, depending on the value of the Show full log messages
checkbox in the form above.

Inspecting Changes Between Revisions

The View changes... buttons (placed above and below the list
of changes, on the left side) will show the set of differences
corresponding to the aggregated changes starting from the old
revision (first radio-button) to the new revision (second
radio-button), in the TracChangeset view.

Note that the old revision doesn't need to be actually
older than the new revision: it simply gives a base
for the diff. It's therefore entirely possible to easily
generate a reverse diff, for reverting what has been done
in the given range of revisions.

Finally, if the two revisions are identical, the corresponding
changeset will be shown (same effect as clicking on column 5).

Alternative Formats

The ChangeLog Text

At the bottom of the page, there's a ChangeLog link
that will show the range of revisions as currently shown,
but as a simple text, matching the usual conventions for
ChangeLog files.

RSS Support

The revision log also provides a RSS feed to monitor the changes.
To subscribe to a RSS feed for a file or directory, open its
revision log in the browser and click the orange 'XML' icon at the bottom
of the page. For more information on RSS support in Trac, see TracRss.

----
See also: TracBrowser, TracChangeset, TracGuide


Transition Planning

Please see the summary of the plan and the discussion that started it all.

Also, see the [milestone:0.18 milestone for the great renaming] and the [milestone:0.50 milestone for splitting off components].

The Great Renaming

This is the plan for the renaming. It does not consider that some of these may go away when added to base. These have not yet been evaluated for internal dependencies.

MissingH Module New Module New Package
MissingH.AnyDBM Database.AnyDBM [/anydbm AnyDBM]
MissingH.AnyDBM.MapDBM Database.AnyDBM.MapDBM [/anydbm AnyDBM]
MissingH.AnyDBM.StringDBM Database.AnyDBM.StringDBM [/anydbm AnyDBM]
MissingH.Bits Data.Bits.Utils MissingH
MissingH.Checksum.CRC32.GZip Data.Hash.CRC32.GZip MissingH
MissingH.Checksum.CRC32.Posix Data.Hash.CRC32.Posix MissingH
MissingH.Checksum.MD5 Data.Hash.MD5 MissingH
MissingH.Cmd System.Cmd.Utils MissingH
MissingH.Compression.Inflate Data.Compression.Inflate haskell-filearchive
MissingH.!ConfigParser Data.!ConfigFile [/configfile ConfigFile]
MissingH.!ConfigParser.Lexer hide [/configfile ConfigFile]
MissingH.!ConfigParser.Parser Data.!ConfigFile.Parser [/configfile ConfigFile]
MissingH.!ConfigParser.Types Data.!ConfigFile.Types [/configfile ConfigFile]
MissingH.Daemon System.Daemon server-utils
MissingH.Debian System.Debian hsdebian
MissingH.Debian.!ControlParser System.Debian.!ControlParser hsdebian
MissingH.Either Data.Either.Utils MissingH
MissingH.Email.Mailbox Network.Email.Mailbox hsmail
MissingH.Email.Parser See FlattenMessage
MissingH.Email.Sendmail Network.Email.Sendmail hsmail
MissingH.!FileArchive.GZip System.!FileArchive.GZip haskell-archive
MissingH.!GetOpt System.Console.!GetOpt.Utils MissingH
MissingH.Hsemail.Rfc2234 remove in favor of original package
MissingH.Hsemail.Rfc2821 remove in favor of original package
MissingH.Hsemail.Rfc2822 remove in favor of original package
MissingH.HUnit Test.HUnit.Utils MissingH
MissingH.IO System.IO.Utils MissingH
MissingH.IO.Binary System.IO.Binary MissingH, but consider removing if ByteString is good enough now
MissingH.IO.BlockIO remove in favor of original package
MissingH.IO.HVFS System.IO.HVFS HVFS
MissingH.IO.HVFS.Combinators System.IO.HVFS.Combinators HVFS
MissingH.IO.HVFS.!InstanceHelpers System.IO.HVFS.!InstanceHelpers HVFS
MissingH.IO.HVFS.Utils System.IO.HVFS.Utils HVFS
MissingH.IO.HVIO System.IO.HVIO HVFS
MissingH.IO.!PlafCompat System.IO.!PlafCompat HVFS
MissingH.IO.!PosixConsts System.Posix.Consts MissingH
MissingH.IO.!StatCompat System.IO.!StatCompat HVFS
MissingH.IO.!WindowsCompat System.IO.!WindowsCompat HVFS
MissingH.List Data.List.Utils MissingH
MissingH.Logging System.Log [/hslogger hslogger]
MissingH.Logging.Handler System.Log.Handler [/hslogger hslogger]
MissingH.Logging.Handler.Simple System.Log.Handler.Simple [/hslogger hslogger]
MissingH.Logging.Handler.Syslog System.Log.Handler.Syslog [/hslogger hslogger]
MissingH.Logging.Logger System.Log.Logger [/hslogger hslogger]
MissingH.Map Data.Map.Utils MissingH
MissingH.Maybe Data.Maybe.Utils MissingH
MissingH.MIMETypes Data.MIME.Types rfcutils
MissingH.Network Network.Utils haskell-netutils or merge with an existing net project
MissingH.Network.FTP.Client Network.FTP.Client [/ftphs ftphs]
MissingH.Network.FTP.!ParserClient hide? [/ftphs ftphs]
MissingH.Network.FTP.!ParserServer hide? [/ftphs ftphs]
MissingH.Network.FTP.Server Network.FTP.Server [/ftphs ftphs]
MissingH.Network.!SocketServer Network.!SocketServer as above
MissingH.Parsec Text.!ParserCombinators.Parsec.Utils MissingH
MissingH.Path System.Path HVFS
MissingH.Path.!FilePath remove in favor of haskell-filepath
MissingH.Path.Glob System.Path.Glob HVFS
MissingH.Path.!NameManip System.Path.!NameManip HVFS
MissingH.Path.!WildMatch System.Path.!WildMatch HVFS
MissingH.!ProgressMeter Data.Progress.Meter MissingH
MissingH.!ProgressTracker Data.Progress.Tracker MissingH
MissingH.Quantity Data.Quantity MissingH
MissingH.Regex.Pesco Text.Regex.!PerlOps MissingH or rewrite/remove if GHC 6.6 regexps are nice enough
MissingH.Str Data.String MissingH
MissingH.Str.CSV Data.CSV MissingH
MissingH.Threads Control.Concurrent.Thread.Utils MissingH
MissingH.Threads.Child remove in favor of original package
MissingH.Threads.Timeout remove in favor of original package
MissingH.Time System.Time.Utils MissingH
MissingH.Time.!ParseDate System.Time.!ParseDate MissingH
MissingH.Wash.Mail.Email remove in favor of oroginal package
MissingH.Wash.Mail.!EmailConfig remove in favor of oroginal package
MissingH.Wash.Mail.!HeaderField remove in favor of oroginal package
MissingH.Wash.Mail.!MailParser remove in favor of oroginal package
MissingH.Wash.Mail.Message remove in favor of oroginal package
MissingH.Wash.Mail.MIME remove in favor of oroginal package
MissingH.Wash.Utility.Auxiliary remove in favor of oroginal package
MissingH.Wash.Utility.Base32 remove in favor of oroginal package
MissingH.Wash.Utility.Base64 remove in favor of oroginal package
MissingH.Wash.Utility.!FileNames remove in favor of oroginal package
MissingH.Wash.Utility.Hex remove in favor of oroginal package
MissingH.Wash.Utility.!IntToString remove in favor of oroginal package
MissingH.Wash.Utility.ISO8601 remove in favor of oroginal package
MissingH.Wash.Utility.!JavaScript remove in favor of oroginal package
MissingH.Wash.Utility.Locking remove in favor of oroginal package
MissingH.Wash.Utility.!QuotedPrintable remove in favor of oroginal package
MissingH.Wash.Utility.RFC2047 remove in favor of oroginal package
MissingH.Wash.Utility.RFC2279 remove in favor of oroginal package
MissingH.Wash.Utility.RFC2397 remove in favor of oroginal package
MissingH.Wash.Utility.Shell remove in favor of oroginal package
MissingH.Wash.Utility.!SimpleParser remove in favor of oroginal package
MissingH.Wash.Utility.Unique remove in favor of oroginal package
MissingH.Wash.Utility.URLCoding remove in favor of oroginal package

Projects that are known to use MissingH


Welcome to MissingH

MissingH is a large collection of assorted utility libraries for Haskell. Its primary audience is Haskell programmers that want to get practical things done fast.

It also serves as a staging area of sorts for useful, general-purpose Haskell code. This could be code that may eventually wind up in base Haskell libraries, or it could grow into a library in its own and be forked off. Or it could remain in MissingH indefinately.

But that doesn't mean that MissingH is of low quality. It is backed by a rigorous unit test suite and comprehensive documentation.

Starting Points

Using This Site:

Downloads: Source and Binaries

Contributing to MissingH

You can always download the source from the Downloads page and attach diffs. But it's far better, both for you and for me, if you use Git.

Please see our 5-Minute Git Guide. You can check out the MissingH repository with:

git clone git://git.complete.org/missingh

You can also help by adding information to this wiki.

Mailing List

I encourage the use of the haskell-cafe mailing list for questions and discussions about MissingH. Gmane has made available excellent archives of this list as well.

Forum / Web Discussion Board

There is a MissingH forum hosted right here on this site; just click the Forums tab above.