symantic-grammar-0.3.1.20180831: Library for symantic grammars.

Safe HaskellNone
LanguageHaskell2010

Language.Symantic.Grammar.Fixity

Contents

Synopsis

Type Fixity

data Fixity Source #

Constructors

Fixity1 Unifix 
Fixity2 Infix 
Instances
Eq Fixity Source # 
Instance details

Defined in Language.Symantic.Grammar.Fixity

Methods

(==) :: Fixity -> Fixity -> Bool #

(/=) :: Fixity -> Fixity -> Bool #

Show Fixity Source # 
Instance details

Defined in Language.Symantic.Grammar.Fixity

PrecedenceOf Fixity Source # 
Instance details

Defined in Language.Symantic.Grammar.Fixity

Type Unifix

data Unifix Source #

Constructors

Prefix 
Postfix 
Instances
Eq Unifix Source # 
Instance details

Defined in Language.Symantic.Grammar.Fixity

Methods

(==) :: Unifix -> Unifix -> Bool #

(/=) :: Unifix -> Unifix -> Bool #

Show Unifix Source # 
Instance details

Defined in Language.Symantic.Grammar.Fixity

PrecedenceOf Unifix Source # 
Instance details

Defined in Language.Symantic.Grammar.Fixity

Type Infix

data Infix Source #

Instances
Eq Infix Source # 
Instance details

Defined in Language.Symantic.Grammar.Fixity

Methods

(==) :: Infix -> Infix -> Bool #

(/=) :: Infix -> Infix -> Bool #

Show Infix Source # 
Instance details

Defined in Language.Symantic.Grammar.Fixity

Methods

showsPrec :: Int -> Infix -> ShowS #

show :: Infix -> String #

showList :: [Infix] -> ShowS #

PrecedenceOf Infix Source # 
Instance details

Defined in Language.Symantic.Grammar.Fixity

needsParenInfix :: (Infix, Side) -> Infix -> Bool Source #

Given Precedence and Associativity of its parent operator, and the operand Side it is in, return whether an Infix operator needs to be enclosed by parenthesis.

parenInfix :: (Semigroup s, IsString s) => (Infix, Side) -> Infix -> s -> s Source #

If needsParenInfix is True, enclose the given IsString by parenthesis, otherwise returns the same IsString.

Type Precedence

Class PrecedenceOf

class PrecedenceOf a where Source #

Minimal complete definition

precedence

Methods

precedence :: a -> Precedence Source #

Type Associativity

data Associativity Source #

Constructors

AssocL

Associate to the left: a ¹ b ² c == (a ¹ b) ² c

AssocR

Associate to the right: a ¹ b ² c == a ¹ (b ² c)

AssocB Side

Associate to both sides, but to Side when reading.

Type Side

data Side Source #

Constructors

SideL

Left

SideR

Right

Instances
Eq Side Source # 
Instance details

Defined in Language.Symantic.Grammar.Fixity

Methods

(==) :: Side -> Side -> Bool #

(/=) :: Side -> Side -> Bool #

Show Side Source # 
Instance details

Defined in Language.Symantic.Grammar.Fixity

Methods

showsPrec :: Int -> Side -> ShowS #

show :: Side -> String #

showList :: [Side] -> ShowS #