Hugs 98 and the Haskell Hierarchical Libraries

Hugs 98 provides the same Haskell Hierarchical Libraries as GHC, except for the functions listed here.

What's missing from Hugs

(The numbers refer to the list of excuses below.)

ModuleMissing functions
Control.Concurrent myThreadId, killThread, throwTo,
threadDelay, threadWaitRead, threadWaitWrite,
mergeIO, nmergeIO1,
rtsSupportsBoundThreads, forkOS, isCurrentThreadBound, runInBoundThread, runInUnboundThread2
Control.Concurrent.MVar addMVarFinalizer1
Control.Exception throwTo, throwDynTo2,
setUncaughtExceptionHandler, getUncaughtExceptionHandler
Control.Parallel.Strategies omitted module1
Data.Generics omitted module3
Data.Generics.* omitted modules3
Data.IORef mkWeakIORef1
Foreign.ForeignPtr finalizeForeignPtr
Foreign.Concurrent omitted module1
System.Console.Readline omitted module4
System.Console.SimpleLineEditor omitted module4
System.Environment getEnvironment
System.IO hGetBufNonBlocking, hPutBufNonBlocking5,
hSetFileSize, hShow, openTempFile, openBinaryTempFile
System.Posix.Process forkProcess6
System.Posix.Signals installHandler1,
setStoppedChildFlag, queryStoppedChildFlag
System.Process omitted module6
Text.Read readPrec, readListPrec, readListDefault, readListPrecDefault7

Excuses

  1. Hugs provides only co-operative concurrency, whereas GHC has pre-emptive concurrency and greater control over threads. Moreover, Hugs can only switch between threads in the IO monad.
  2. Hugs cannot manipulate threads via thread ids.
  3. Some things are heavily reliant on GHC-only extensions.
  4. Hugs has limited support for terminal operations.
  5. Hugs has limited support for binary I/O, and in any case this part of the library interface isn't settled yet.
  6. Hugs lacks some operations on Handles.
  7. The libraries extend the Read class with methods that use the new ReadPrec monad. Hugs provides the ReadPrec monad, but retains the Haskell 98 Read class to keep the Prelude within Haskell 98.