# nhc98 release history

### nhc98 1.21 (darcs) features

### nhc98 1.20 (2007-11-22) features

- New: Pattern guards are supported.
- New: More hierarchical libraries have been added to the base package.
- Bugfix: Now builds on 64-bit machines (in 32-bit mode)
- Bugfix: Newer version of hmake (3.13)
- Bugfix: The evil mangler is now less evil (and more robust)
- Bugfix: Add a workaround for the hi-membug that caused build failures on many recent Linux platforms.
- Bugfix: Lexical error on varid _2a is fixed.
- Bugfix: Renaming bug in newtype A a = A a.
- Bugfix: hp2graph problem with x-axis resolution in interval (-i) sampling.
- Bugfix: hp2graph end-of-file parsing bug.
- New: The runtime system code is now documented using funnelweb.

### nhc98 1.18 (2005-03-11) features

- New: nhc98 now ships with a testsuite.
- New: Several more packages of hierarchical libraries are included in the build: base, parsec, haskell-src, QuickCheck, HaXml, HUnit, Cabal.
- New: FFI improvements: foreign import "dynamic" is now supported, and named C header-files are now used.
- New: cpphs is included as a replacement for the C preprocessor.
- New: The compiler now uses cpphs for Haskell source instead of cpp. This removes problems with string gaps, primes in identifiers, and so on.
- New: In hmake-interactive, if the readline library is not available, the simple line editor now has a history mechanism.
- Bugfix: hmake's processing of cpp conditional directives is improved also.
- Bugfix: Evil bugfixes for ghc versions ≥ 6.0
- Bugfix: More evil bugfixes for gcc versions ≥ 3.3
- Bugfix: A numeric pattern can now match against a Num newtype.
- Bugfix: Foreign imports and abstract newtypes now play OK together.
- Bugfix: Methods in qualified classes no longer need to be qualified in instance decls.
- Bugfix: GreenCard now accepts <<.../...>> syntax.
- Bugfix: Numerous internal tidy-ups, including fixes such that nhc98 can once again be built by hbc.

### nhc98 1.16 (2003-03-08) features

- New: A large subset of the base package of hierarchical libraries is now included in the build.
- New: The primitive FFI mechanism has been updated to match the latest official spec, and the full Foreign libraries are also included.
- Performance: The library function List.sortBy now uses a stable O(n log n) mergesort.
- Bugfix: nhc98 now works correctly in the presence of gcc-3.x.
- Bugfix: nhc98 once again builds on Cygwin with ghc.
- Bugfix: Numerous other small fixes, including revisions to the Haskell'98 standard.

### nhc98 1.14a (2002-08-13) features

- The only change between 1.14 and 1.14a is that the version of hmake included in the source package has been updated from 3.05 to 3.06.

### nhc98 1.14 (2002-06-14) features

- Major change: The Hat tracing system is now entirely separate from the nhc98 compiler. Hat can now be used with either ghc or nhc98 - you should download and build the Hat system after building nhc98.
- New: The compiler now supports a simplified version of ghc's package mechanism. No documentation yet, but Hat relies on it.
- Performance: Various patches for improved time/space usage of the compiler itself, contributed by Thomas Nordin.
- Bugfix: Various small fixes for OS environments like OpenBSD, ix86-Solaris, etc.

### nhc98 1.12 (2002-03-14) features

- New: The old hat-trail tool written in Java is now obsolete, replaced by a brand new version written in Haskell.
- New: There are numerous improvements to the Hat tools, and their command syntax is now simplified and much more uniform.
- New: All possible tunnels between hat-trail, hat-observe, and hat-detect are now available.
- New: The first version of the portable Hat transformation is now available. In other words, Hat can now compile simple programs with ghc instead of nhc98.
- Bugfix: The Time library now has implementations of addToClockTime and diffClockTimes, and tdPicoSec is renamed to tdPicosec.
- Bugfix: The Numeric library now has implementations of floatToDigits, formatRealFloat, fromRat, and show[EFG]Float.
- Bugfix: Numerous small problems with building on MacOS X have been ironed out.
- Bugfix: The IO library did not re-export the PreludeIO definitions.
- Bugfix: An infix pattern decl of the form a `Foo` (b `Bar` c) = 3 `Foo` (4 `Bar` 5) could not be compiled because the parser lost the explicit bracketing on the LHS.
- Bugfix: Allow an empty import/export decl with a single stray comma.
- Bugfix: Fix block-buffered file handles, so that they produce output exactly when the buffer is full.
- Bugfix: Do not treat `qualified', `hiding', or `interface' as keywords of the language - they are significant only in certain positions.
- Bugfix: Increase garbage collection counters to 64-bits for correct reports in long-running computations.
- Bugfix: Accept `instance ClassName (Prelude.->)' in source and interface files.
- Bugfix: Work around a rare buffer problem in hp2graph.
- Bugfix: Where an entire module is re-exported, but one of its variables is hidden on import, the hidden variable should not be re-exported.
- Bugfix: Fix link message "undefined reference to `FN_Ix_46_95_46Unknown_46variable'" when using library Array.
- Bugfix: Update configuration script (again) to detect ghc-5.02 correctly.

### nhc98 1.10 (2001-10-19) features

- Bugfix: The qualified import/export namespace is now managed much better by the compiler, in accordance with latest revision of the Haskell'98 Report.
- Bugfix: In the Hat tools, there is a more accurate distinction between top-level identifiers and local identifiers.
- Bugfix: Numerous small bugfixes in hat-observe and hat-detect, including better pretty-printing of infix expressions and strings.

### nhc98 1.08 (2001-09-25) features

- New: Tunnels from hat-observe to hat-detect and hat-trail, enabling the user to jump directly to something of interest.
- New: Prototype version of the portable source-to-source transformation is in progress.
- New: More updates of the the Prelude/Libraries to match the recent revisions of the Haskell'98 Report.
- Bugfix: Numerous small bugfixes in hat-observe, hat-detect, and hat-trail.
- Bugfix: You can now have multiple copies of hat-trail running simultaneously.
- Bugfix: A module with an explicit null export list previously exported everything - now it correctly exports nothing.
- Bugfix: In multiple equations with identical (n+k) patterns, only the first equation was ever matched, the rest were previously ignored.
- Bugfix: A negative literal integer in a pattern caused a compiler error if the (-) function was not also used in an expression.
- Bugfix: An imported named field, used both as a pattern and a selector in the same equation, gave rise to an "Unbound Identifier" error.
- Bugfix: Fixes random crashes in primitive implementation of putStr.
- Bugfix: Link options for ncurses (in src/tracer/hat) were in the wrong order.

### nhc98 1.06 (2001-06-08) features

- New: Updated the Prelude/Libraries to match the newly revised Haskell'98 Report.
- Update: Default build target is now basic + tracer (was just basic).
- Update: Building with gcc now builds everything with gcc, including profiling and tracing. This is much faster.
- Bugfix: A bad interaction between Java and Cygwin to do with Unix vs. Windows pathnames. (Visible only in Hat-trail and Hood.)
- Bugfix: An 'hi' built with just a C compiler seg-faulted, due to mismatched .c file versions in the 1.04 source package.
- Bugfix: Recognise an existing ghc-5 installation.
- Bugfix: Missing include <errno.h> for Cygwin.
- Bugfix: Minor filename recognition error in hat-stack and hat-connect.
- Bugfix: Filename extension for time profiling changed to .z.o to avoid Windows conflicts between .T.o and .t.o. The compiler flags -T and -t are unchanged, -z is a new synonym for -t.

### nhc98 1.04 (2001-05-21) features

- New: Support for extended module namespaces of the form Long.Hierarchical.Module.Name is now provided in both nhc98 and hmake.
- Update: Improved printing of I/O error messages.
- Update: Improved (more accurate) time profiling now provided.
- Bugfix: An identifier hidden on import and redefined in the current module, then exported, but also imported qualified and used qualified in the current module, led to an incorrect interface file being generated.
- Bugfix: hmake issued an unnecessary -cpp flag on some literate files.
- Bugfix: Type of IO.hSetPosn :: Handle -> HandlePosn -> IO () was incorrect
- Bugfix: Compile-time error in `src/tracer/runtime/ident.c` on RedHat 7 and other systems using the new ISO C standard for `fpos_t`.
- Bugfix: A file opened in ReadMode or WriteMode was actually opened in ReadWriteMode, so if the file had strict permissions the correct opening command would fail. Conversely, opening in ReadWriteMode actually gave ReadMode instead, and file updates silently failed.
- Bugfix: Operator sections suffered from priority inversion, for example (^2*3) was incorrectly parsed as (^(2*3)), even though ^ binds more tightly than *.
- Bugfix: The library function Directory.createDirectory gave strange permissions to the new directory. (Mode was in hex, but should have been octal!)

The following updates and bugfixes are specifically for Hat, the redex-trail-based tracing and debugging system.

- New architecture: Traced programs now build their trails in files, not in the heap. This has four consequences: (1) you no longer need to give your program large amounts of extra memory to trace it; but (2) you may need to have large amounts of free disk space, particularly to trace long-running programs; (3) for the moment, traced programs now run even slower (we are working to improve this); and (4) trails are now first-class objects, so new tools can manipulate them to provide several different views of the computation.
- New tools: Storing trails in files means we can now provide more tools to examine them. The original graphical browser is now renamed hat-trail, and can fully explore the redex trails in file. hat-stack gives a virtual stack back-trace from a trail file (no need to re-run the program). hat-observe gives you HOOD-like observation of the input and output from functions. hat-detect does algorithmic debugging in the style of Freja; it discovers and identifies the location of a bug after asking you some simple questions. hat-check verifies the integrity of the trail file, prints a textual dump, and gives statistics about its contents.
- Update: Fuller Standard Library support for tracing: added Directory, System, CPUTime, Random. (Still missing: Time, Locale.)
- Update: More Haskell'98 language features are accepted: named fields can now be traced, although the hat tools don't yet show them in source form. Pattern bindings are also handled better.

### nhc98 release 1.02 (2001-02-14) features

- Improvement: Fixed a space-leak in the compiler. Compilation now requires approximately half the previous maximum heap, and as a result, compile time is 5-10% faster.
- Update: 'hi' now uses GNU's readline library if available.
- Update: Improved error reporting in hmake.
- Update: Improved the raw speed of both output and input for compiled programs, by between 3x and 10x, depending on usage.
- Bugfix: Auto-configuration of hmake. It occasionally failed to find an already-installed version of nhc98. Also, on Solaris (and other System V based OSes), auto-detection of hbc and/or ghc sometimes failed due to incompatibility of the 'which' command. Finally, the 'hmake' script itself failed on Cygwin due to the 'which' command being missing altogether.
- Bugfix: 'atan2' in class RealFloat - revert to a default declaration that does not use 'isNegativeZero', because we don't implement the latter.
- Bugfix: Foreign functions declared of IO return type (especially zero-arity CAFs) using the primitive FFI could suffer from unexpected sharing of results.
- Bugfix: Failure to build BinArray library on FreeBSD (htonl/ntohl errors).
- Bugfix: Incorrect definitions of inRange and rangeSize in Ix library.
- Bugfix: Local infix declarations in `where' blocks were ignored.
- Bugfix: Some non-trivial `newtype' decls produced spurious errors.
- Bugfix: Printing of characters in the range 0x0100 to 0xffff now works.
- Bugfix: @-pattern-bindings are now fixed. As a result, Happy-generated parsers should now compile correctly.
- Bugfix: We now accept {-# pragmas #-} in any position, and understand LINE pragmas.

The following updates and bugfixes are specifically for Hat, the redex-trail-based tracing and debugging system.

- New Feature: When a traced program is interrupted or terminates with an error, you get a virtual stack trace of the computation "for free", without having to start up a browser.
- Update: Foreign imports (via the new common primitive FFI) with an I/O result type are now also traced (previously only pure foreign functions were traced).
- Update: Interface and object files for tracing now have distinct file suffixes: .T.hi and .T.o. This improves matters enormously when switching between normal and tracing versions of a program. It also fixes some dependency bugs when building the tracing version of the compiler. Both the compiler and hmake have knowledge of the new suffixes.
- Bugfix: The 'rtb' script failed because of missing shell quotes.
- Added standard libraries: IO, Array. (Still missing: Directory, System, Time, Locale, CPUTime, Random.)
- Added extension libraries: FFI, IOExtras.

### full nhc98 release 1.00 (2000-09-15) features

- Update: Many changes to the nhc98 tracer (listed separately below) and a new name for the tracing system: Hat.
- Update: Many changes to hi (hmake interactive), both to improve the automatic configuration and to add features.
- Addition: Andy Gill's HOOD debugging library.
- Addition: New commandline flag -showtype, used by hi to display types of expressions.
- Addition: New options for hmake: -clean and -realclean.
- Documentation: We have added many more comments and type signatures to the compiler, so implementers should find it easier to read.
- Bugfix: Added correct derivation for Read and Show classes on named fields.
- Bugfix: Configuration bugs for Cygwin and Solaris.
- Bugfix: Configuration for 'echo -n' on certain OSes.
- Bugfix: Parser now accepts {-# pragmas #-}.
- Bugfix: Directory.closedir: ensure directory is finalised only once.
- Bugfix: New functions FFI.withForeignObj and FFI.touchForeignObj.
- Bugfix: List.isPrefixOf: second clause was missing.
- Bugfix: System.getEnv: throws error when symbol is undefined.
- Bugfix: Prelude.lex "1..n" now returns [("1", "..n")].
- Bugfix: Added Read and Show instances for 5-tuples.
- Bugfix: Doubles were occasionally truncated to Float, Floats were occasionally promoted to Double.
- Portability: You can now run nhc98comp with Hugs! (although this is unlikely to be directly useful to anyone.)

The following updates and bugfixes are specifically for Hat, the redex-trail-based tracing and debugging system.

- Literal numeric expressions and patterns now work again (previously broken in the move to Haskell'98).
- Added arithmetic primitives for Integer, Float, and Double types.
- Added rules for the primitive FFI (foreign import only).
- Added standard libraries: Ratio, Complex, Numeric, Ix, List, Maybe, Char, Monad. (Still missing: Array, Directory, System, Time, Locale, CPUTime, Random.)
- Fixed the compilation of newtypes.
- Fixed derived instances of classes.
- Fixed compiler conflict between Java 1.1 and 1.2.

### nhc98 pre-release 19 (2000-06-05) features

- Big Change: Until recently, the normal/profiling and tracing versions of the Prelude and Libraries have been kept in separate source trees. The normal set is Haskell'98 compliant, the tracing set was 1.3 and incomplete. We have now merged the two sets so that all the libraries which actually build for tracing are genuinely Haskell'98. There are still several libraries that don't compile for tracing yet, but this is nevertheless a big step forward to improving the tracing experience.
- Addition: Implementations of the standard Time and CPUTime libraries. All standard libraries are now implemented in normal and profiling versions.
- Addition: "hmake interactive" - a brand new Hugs-like interpreter for interactive development.
- Change: The trace browser command has now been renamed `rtb` for "Redex Trail Browser".
- Bugfix: IO.hgetLine was broken.

### nhc98 pre-release 18 (2000-04-10) features

- Bugfix: More patches needed for building with ghc-4.06.
- Bugfix: The new implementations of two Directory functions (doesFileExist and doesDirectoryExist) threw IOErrors when they shouldn't.
- Addition: We've improved the error messages given by the Directory IO functions to include more information about what caused the error.
- Addition: A new compiler flag -report-imports.

### nhc98 pre-release 17 (2000-03-14) features

- Bugfix: Now builds with ghc-4.06 as well as ghc-4.04 and earlier.
- Bugfix: Occasional runtime crashes when using Arrays are now eliminated.

### nhc98 pre-release 16 (2000-03-02) features

- Addition: The standard Random library.
- Addition: The standard Directory library.
- Addition: The common IOExtras library.
- Bugfixes: Various small configuration bugfixes.

### nhc98 pre-release 15 (2000-01-18) features

- Bugfix: There were some minor build-problems with pre14 which I hope are now fixed.
- Bugfix: Duplicate labels error when building the mutator for profiling.
- Bugfix: Erroneous compiler complaints about class contexts when building certain Prelude functions.
- Bugfix: Missing file FFIBuiltin.hi.

### nhc98 pre-release 14 (1999-12-02) features

- Update: Various tweaks and additions to the new FFI to make it more solid. Libraries now include Sven Panne's FFI.
- Performance: Thanks to Julian Seward's prompting, we have improved the runtime performance of nhc98-compiled programs by about 25% (if you have gcc). This also means that if you bootstrap nhc98 from C sources, you will get a faster compiler.

### nhc98 pre-release 13 (1999-11-19) features

- Addition: Completely new FFI added, following the Hugs/ghc model. Beware, this is still alpha - It might even break unrelated things that worked previously! If in doubt, use 1.0pre12.
- Bugfixes: Numerous small fixes for building on various machines.

### nhc98 pre-release 12 (1999-10-29) features

- Bugfix: Removed incorrect .h symbolic links. (This patch hardly seems worth a whole new pre-release, but the bug prevented all builds from proceeding.)
- Bugfix: On HP-UX machines, the ansiC backend had a problem due to conflicts between data/code at link time.

### nhc98 pre-release 11 (1999-10-26) features

- Bugfix: Minor fixes to config and Makefiles for Cygwin.

### nhc98 pre-release 10 (1999-10-19) features

- Update: Compiling programs for tracing now works again, although tracing versions of the Prelude and Libraries are still not fully up-to-date with Haskell'98. The trace browser now has a scripting facility to record your tracing activity for later replay.
- Update: The removal of named field punning in Haskell'98 has turned out to be unpopular. nhc98 now supports punning again as a compile-time option (default on, except in -98 compatibility mode).
- Update: The old 'nhc98config' is now simplified and called 'configure'. This means that "./configure; make; make install" should now work as expected.
- Update: At configuration time for hmake, we now try to detect existing installations of ghc/hbc/nhc and provide sensible defaults, so you should no longer need to edit config files.
- Bugfix: Resolved conflicts when using hmake flags -I and -d together.
- Bugfix: Some changes to Makefiles, so building on Cygwin32 is easier.
- Bugfix: hSetPosn had wrong arity.

### nhc98 pre-release 9 (1999-09-16) features

- Bugfix: Library module Maybe was missing the definition isNothing.
- Bugfix: Several changes to Makefiles, so building with ghc is easier.
- Bugfix: hmake is more ghc-friendly.
- Update: The standard cpp symbols __HASKELL98__ and __HASKELL__=98 are now supported.

### nhc98 pre-release 8 (1999-08-06) features

- Bugfix: Initialisation of a value using named fields failed to type-check if some fields were missing.
- Bugfix: Several small script changes required when compiling with ghc.
- Bugfix: Compiler fault in processing interface-files - prevented profiling and tracing versions of the prelude/libraries from building unless the old interface files were removed first.

### nhc98 pre-release 7 (1999-07-23) features

- Bugfix: Brought layout processing into line with the algorithm given in the Report.
- Update: Underscores are now (optionally) treated in full accordance with the Report as strictly lower-case.
- Update: Licensing conditions for nhc98 are now more explicit.

### nhc98 pre-release 6 (1999-06-10) features

- Update: At last, we grudgingly support `(n+k)` patterns.

### nhc98 pre-release 5 (990519) features

- Change: Simpler configuration for hmake and nhc98.
- Update: Infix decls now allowed anywhere type signatures are. Modules can be imported unqualified with a local alias. Aliases can overlap. Empty decls (i.e. extra explicit semicolons) are allowed.
- Bugfix: isAlphanum is now isAlphaNum.
- Bugfix: Derived Read instances for non-associative infix constructors now work (previously looped).

### nhc98 pre-release 4 (990503) features

- Fixes: compiler's source code needs to compile under Haskell 98 also!

### nhc98 pre-release 3 (990427) features

- Fixes: compiler has better compliance with Haskell 98. (Maximal munch for comments, removed record punning, and numerous other changes.)

### nhc98 pre-release 2 (990217) features

- Bugfix: Stable Pointers, as used in GreenCard, are now non-strict, i.e. passing the value (error "message") to C as a stable pointer no longer terminates the program immediately.

### nhc98 pre-release 1 (990128) features

- Major change: nhc13 has become nhc98, supporting the new Haskell 98 language standard, although still incompletely.
- Major addition: Existential types in data declarations.
- Addition: New options `-M` and `-Md` to hmake.
- Bugfix: In the Binary library there was a very slight incompatibility between the types described in the ISMM'98 paper and the implementation. The implementation is now fixed to match the paper.
- Bugfix: At last, the distribution tarfiles extract into an nhc98-x.x directory, rather than the current directory.

### Release history of nhc13

The latest updates to these pages are available on the WWW from `http://www.haskell.org/nhc98/`

This page last modified: 23rd November 2007
York Functional Programming Group