# Libraries in Hat

### Standard Libraries

Currently, Hat fully supports the Standard Prelude and official Haskell'98 libraries, defined in the Haskell '98 Library Report:

### Extension Libraries

Hat also supports some of the extension libraries supplied with more recent versions of GHC, nhc98, and Hugs. These are the hierarchical libraries mainly in the base package. Actually only a subset of the base, parsec, and mtl packages is currently available in Hat, but it includes most of the really useful and common extensions, such as the FFI libraries, IORefs, and unsafePerformIO. A full list is below.

supported | unsupported
--- | ---
Control.Arrow Control.Monad Control.Monad.Cont Control.Monad.Error Control.Monad.Fix Control.Monad.Identity Control.Monad.List Control.Monad.Reader Control.Monad.RWS Control.Monad.State Control.Monad.Trans Control.Monad.Writer | Control.Concurrent Control.Concurrent.* Control.Exception Control.Exception.* Control.Monad.ST Control.Parallel Control.Parallel.*
Data.Array Data.Bits Data.Bool Data.Char Data.Complex Data.Either Data.FiniteMap Data.IORef Data.Ix Data.List Data.Maybe Data.Monoid Data.PackedString Data.Ratio Data.Set Data.Tuple Data.Word | Data.Array.* Data.Int Data.Generics Data.Dynamic Data.STRef Data.STRef.* Data.Unique Data.Word
Debug.Trace | Debug.QuickCheck Debug.QuickCheck.*
Foreign.ForeignPtr Foreign.Marshal.Error Foreign.Ptr Foreign.StablePtr Foreign.Storable | Foreign.C Foreign.C.Error Foreign.C.String Foreign.C.Types Foreign.C.TypesISO Foreign.Marshal.Alloc Foreign.Marshal.Array Foreign.Marshal.Utils Foreign.Marshal.Pool
System.CPUTime System.Console.GetOpt System.Cmd System.Directory System.Environment System.Exit System.IO System.IO.Error System.IO.Unsafe System.Locale System.Random System.Time | System.Info System.Mem System.Mem.StableName System.Mem.Weak System.Posix.Signals System.Posix.Types

Text.ParserCombinators.Parsec
Text.ParserCombinators.Parsec.Error
Text.ParserCombinators.Parsec.Char
Text.ParserCombinators.Parsec.Combinator
Text.ParserCombinators.Parsec.Expr
Text.ParserCombinators.Parsec.Perm
Text.ParserCombinators.Parsec.Pos
Text.ParserCombinators.Parsec.Prim
Text.PrettyPrint
Text.PrettyPrint.HughesPJ
Text.Read
Text.Show

Text.Html
Text.Html.BlockTable
Text.ParserCombinators.Parsec.Language
Text.ParserCombinators.Parsec.Token
Text.ParserCombinators.ReadP
Text.ParserCombinators.ReadPrec
Text.Read.Lex
Text.Regex
Text.Regex.Posix
Text.Show.Functions

### Your Own Libraries

If you wish to trace a program that uses some libraries, then at the moment you need to copy the source for that library into the same source tree as your program, and explicitly compile it for tracing along with the program. Obviously this requires that the library itself is implemented exclusively in the superset of Haskell'98 supported by Hat. If you trust that the library is correct and do not wish to trace its internal calls, then you can give the flag -trusted to hat-trans (for that library alone).

### Future improvements

We have ideas for the future whereby a library can be used in its original form without needing re-compilation for tracing. We sometimes refer to this idea as wrapping a library, as opposed to the current method of lifting the library source code by transformation. However, for the moment library-wrapping remains a dream.

The latest updates to these pages are available on the WWW from `http://www.haskell.org/hat/`
`http://www.cs.york.ac.uk/fp/hat/`

This page last updated: 27th July 2004
York Functional Programming Group