Copyright | (c) Niklas Broberg 2009 |
---|---|
License | BSD-style (see the file LICENSE.txt) |
Maintainer | Niklas Broberg, d00nibro@chalmers.se |
Stability | stable |
Portability | portable |
Safe Haskell | Safe |
Language | Haskell98 |
Fixity information to give the parser so that infix operators can be parsed properly.
Fixity representation
Operator fixities are represented by their associativity (left, right or none) and their precedence (0-9).
The following three functions all create lists of fixities from textual representations of operators. The intended usage is e.g.
fixs = infixr_ 0 ["$","$!","`seq`"]
Note that the operators are expected as you would write them infix, i.e. with ` characters surrounding varid operators, and varsym operators written as is.
Collections of fixities
preludeFixities :: [Fixity] Source #
All fixities defined in the Prelude.
baseFixities :: [Fixity] Source #
All fixities defined in the base package.
Note that the +++
operator appears in both Control.Arrows and
Text.ParserCombinators.ReadP. The listed precedence for +++
in
this list is that of Control.Arrows.
Applying fixities to an AST
class AppFixity ast where Source #
All AST elements that may include expressions which in turn may need fixity tweaking will be instances of this class.
applyFixities :: Monad m => [Fixity] -> ast SrcSpanInfo -> m (ast SrcSpanInfo) Source #
Tweak any expressions in the element to account for the fixities given. Assumes that all operator expressions are fully left associative chains to begin with.