# How complete is Hat?

Key:
- = no support
+ = partial support
* = full support

"Partial" support of a language feature means that you will be able to trace programs using this feature, but that the traces may not be in convenient source-level terms. Partial support of a library or type-system feature means that some programs may trace OK, but others might not.

feature | Hat (2.04)
--- | ---

Language constructs
modules | *
lambda abstractions | *
pattern matches | *
guards | *
if-then-else | *
case expr of | *
list comprehensions | +
monadic do | +
infix operators | *
numeric literals | *
numeric sequences | +
n+k patterns | *
Basic types
Bool | *
Char | *
List | *
Tuples | *
Int | *
Integer | *
Float | *
Double | *
Rational | *
User types
data types | *
type synonyms | *
newtypes | *
named fields | *
type classes | *
derived instances | *
strict types | *

feature | Hat (2.04)
--- | ---

Input/output
single I/O streams | *
file handling | +
Libraries
Haskell'98 Prelude | *
Haskell'98 Libraries | *
base hierarchical libraries | +
other hierarchical libraries | -
Platform Portability
machine and O/S | *
nhc98 | *
ghc | *
hugs | -
hbc | -
helium | -
Non-Haskell'98 Extensions
primitive FFI | +
hierarchical library namespace | *
unsafePerformIO etc | *
multi-parameter TCs | *
functional dependencies | *
existential types | +
implicit parameters | -
imprecise exceptions | +
concurrency | -
parallelism | -