chickadee » internet-message



internet-message is a collection of parser combinators for the grammar defined in RFC 5322 (Internet Message Format).

Library Procedures

The combinator procedures in this library are based on the interface provided by the abnf library.

These procedures are provided as fields of the <InetMessage> typeclass. Please see the typeclass library for information on type classes.

The <InetMessage> typeclass is intended to provide abstraction over different kinds of input sequences, e.g. character lists, strings, streams, etc. <InetMessage> inherits from <CoreABNF>, which provides the core parsing primitives used to build the CSV grammar parser (see the abnf library for more information).

The following example illustrates the creation of an instance of <InetMessage> specialized for character lists.

(use typeclass internet-message abnf)

(define char-list-<Input>
  (make-<Input> null? car cdr))

(define char-list-<Token>
  (Input->Token char-list-<Input>))

(define char-list-<CharLex>
  (Token->CharLex char-list-<Token>))

(define char-list-<CoreABNF>
  (CharLex->CoreABNF char-list-<CharLex>))

(define char-list-<InetMessage>
  (CoreABNF->InetMessage char-list-<CoreABNF> ))

(import-instance (<InetMessage> char-list-<InetMessage>))

This parser will parse an arbitrary number of header fields as defined in the RFC. For each field, an appropriate alist is created. The following fields are recognized:

  • from
  • sender
  • return-path
  • reply-to
  • to
  • cc
  • bcc
  • message-id
  • in-reply-to
  • references
  • subject
  • comments
  • keywords
  • orig-date
  • resent-date
  • resent-from
  • resent-sender
  • resent-to
  • resent-cc
  • resent-bcc
  • resent-msg-id
  • resent-reply-to
  • received
  • optional-field

This parser will parse a message body as specified by the RFC; that is, any number of text characters, which may be divided into separate lines by CRLF.


This parser will parse a complete message as defined by the RFC and it broken down into the separate header fields and the message body.


This parser parses comment text, as defined by the RFC. Comments may nest.


Version History


Based on the Haskell Rfc2822 module by Peter Simons.

 Copyright 2009-2011 Ivan Raikov and the Okinawa Institute of Science and Technology.
 This program is free software: you can redistribute it and/or
 modify it under the terms of the GNU General Public License as
 published by the Free Software Foundation, either version 3 of the
 License, or (at your option) any later version.
 This program is distributed in the hope that it will be useful, but
 WITHOUT ANY WARRANTY; without even the implied warranty of
 General Public License for more details.
 A full copy of the GPL license can be found at

Contents »