Abstract syntax tree and prettyprinting for Haskell 98. This is only a small subset of the Haskell 98 syntax, so we do not need to pull in haskellsrc and all its complexity. Moreover, haskellsrc gives too little control over the format of prettyprinted text output.
 class HsPretty a where
 data Module = Module {}
 data ExportSpec = ExportSpec [String]
 data ImportDecl = ImportDecl [String]
 data Decl = Decl {}
 operatorTable :: Map String Operator
Documentation
A Haskell module; moduleDecls are functions and variables.
Module  

data ExportSpec Source
A Haskell module's export spec: a list of function and variable identifiers
data ImportDecl Source
A Haskell function or variable declaration. An explicit type declaration is optional. Thus we have just enough for name :: type name [args] = expr. Of course [args] would be empty if it's just a variable.
operatorTable :: Map String OperatorSource
The Haskell operators. Now what about the associativity of (:)? It really doesn't even make sense to ask if (:) is associative in the usual sense, since (x1 : x2) : xs == x1 : (x2 : xs) is not only untrue, but the lefthand side is a type error, except maybe in some very special cases (and then the righthand side would probably be a type error). Is (:) what is called a rightassociative operator? And do I need to expand my Operator type to include this? And then what about () and (/)??? Does this affect their relationship with (+) and ()?