nhc98 compliance with Haskell 98

nhc98 is pretty close to being compliant with the Haskell 98 standard. Here is a complete list of the known deficiencies in nhc98. (See also our list of size limitations.)

  • A small number of the new Library functions remain unimplemented. (Runtime warnings are provided for all unimplemented functions.) The main functions currently missing are those which manipulate TimeDiffs in the Time Library, and a few of the more obscure IO library functions.
  • The simple context restriction has not yet been removed.
  • The declaration style funlhs -> ( funlhs ) {apat} is not implemented.
  • The monomorphism restriction is not implemented.
  • Although the Unicode character set is used internally, there are no facilities for reading or writing files with characters represented by more than 8-bits. Large chars currently appear only as numeric escape codes.

If you would like to implement any of these libraries or features, your contribution would be most welcome.

In addition, the following Haskell'98 behaviours are normally turned off. Use the -98 flag to turn them all on, or use the equivalent separate flags.

  • (n+k) patterns are normally switched off. Use -nkpat to switch them on.
  • Underscore is not normally treated as a lower-case letter. In fact, it is usually transparent: the name _f is a varid, but the name _F is a conid because it begins with an uppercase letter (i.e. after the underscore). Use -underscore to treat underscores as strictly lower-case.

The latest updates to these pages are available on the WWW from

York Functional Programming Group