$Id: TODO 79 2008-05-21 08:59:40Z richard.wm.jones $
Major to-do items.

(1) DONE - In bitmatch operator, use patterns not expressions.

(2) DONE - Allow matching against strings.

(3) DONE - Change the syntax so { ... } surrounds match patterns.

(4) Provide UInt32 and UInt64 types.

(5) Allow for specific offsets and alignment.  Something like this:

    { start : 16;
      another : 16 : offset(256);   (* location would be 256 bits from start *)
    }

(6) and:

    { start : 16;
      another : 16 : align(32);     (* implicit 16 bit gap before this *)
    }

(7) Assertions:

    { start : 16 : assert (offset = 0); }

   (Q: Are these evaluated at compile time or at run time or selectable?)

(8) Named but unbound patterns to avoid "Warning Y: unused variable".

(9) DONE -
    Make the error locations fine-grained, particularly so they point to
    individual fields, not the whole match.

(10) Cross-module, persistent, named patterns, see:
  http://caml.inria.fr/pub/ml-archives/caml-list/2008/04/25992c9c9fa999fe1d35d961dd9917a2.en.html

(11) DONE -
     Runtime endiannness expressions.  The suggested syntax is:

    { field : len : endian (expr) }

    where expr would evaluate to something like BigEndian or
    LittleEndian.

    There are several protocols around where endianness is only
    determined at runtime, examples are libpcap and TIFF.

(12) DONE - More constant field lengths.

(13) Implement native endian functions.

(14) A proper test suite.

(15) More examples:

    ELF binaries
    GIF images
