packages feed

hydra-kernel-0.17.5: src/main/haskell/Hydra/Ast.hs

-- Note: this is an automatically generated file. Do not edit.

-- | A model which provides a common syntax tree for Hydra serializers

module Hydra.Ast where

import qualified Hydra.Core as Core
import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines)
import qualified Data.Scientific as Sci

-- | Operator associativity
data Associativity =
  AssociativityNone |
  AssociativityLeft |
  AssociativityRight |
  AssociativityBoth
  deriving (Eq, Ord, Read, Show)

_Associativity = Core.Name "hydra.ast.Associativity"

_Associativity_none = Core.Name "none"

_Associativity_left = Core.Name "left"

_Associativity_right = Core.Name "right"

_Associativity_both = Core.Name "both"

-- | Formatting option for code blocks
data BlockStyle =
  BlockStyle {
    -- | An optional indentation string
    blockStyleIndent :: (Maybe String),
    -- | Whether to place a newline before the content
    blockStyleNewlineBeforeContent :: Bool,
    -- | Whether to place a newline after the content
    blockStyleNewlineAfterContent :: Bool}
  deriving (Eq, Ord, Read, Show)

_BlockStyle = Core.Name "hydra.ast.BlockStyle"

_BlockStyle_indent = Core.Name "indent"

_BlockStyle_newlineBeforeContent = Core.Name "newlineBeforeContent"

_BlockStyle_newlineAfterContent = Core.Name "newlineAfterContent"

-- | An expression enclosed by brackets
data BracketExpr =
  BracketExpr {
    -- | The bracket pair enclosing the expression
    bracketExprBrackets :: Brackets,
    -- | The expression within the brackets
    bracketExprEnclosed :: Expr,
    -- | The formatting style for the bracketed block
    bracketExprStyle :: BlockStyle}
  deriving (Eq, Ord, Read, Show)

_BracketExpr = Core.Name "hydra.ast.BracketExpr"

_BracketExpr_brackets = Core.Name "brackets"

_BracketExpr_enclosed = Core.Name "enclosed"

_BracketExpr_style = Core.Name "style"

-- | Matching open and close bracket symbols
data Brackets =
  Brackets {
    -- | The opening bracket symbol
    bracketsOpen :: Symbol,
    -- | The closing bracket symbol
    bracketsClose :: Symbol}
  deriving (Eq, Ord, Read, Show)

_Brackets = Core.Name "hydra.ast.Brackets"

_Brackets_open = Core.Name "open"

_Brackets_close = Core.Name "close"

-- | An abstract expression
data Expr =
  -- | A constant symbol
  ExprConst Symbol |
  -- | An indented expression
  ExprIndent IndentedExpression |
  -- | An operator expression
  ExprOp OpExpr |
  -- | A bracketed expression
  ExprBrackets BracketExpr |
  -- | A sequence of expressions joined by a separator, treated as structural layout (not subject to parenthesization)
  ExprSeq SeqExpr
  deriving (Eq, Ord, Read, Show)

_Expr = Core.Name "hydra.ast.Expr"

_Expr_const = Core.Name "const"

_Expr_indent = Core.Name "indent"

_Expr_op = Core.Name "op"

_Expr_brackets = Core.Name "brackets"

_Expr_seq = Core.Name "seq"

-- | Any of several indentation styles
data IndentStyle =
  -- | Indent all lines with the given string
  IndentStyleAllLines String |
  -- | Indent only lines after the first with the given string
  IndentStyleSubsequentLines String
  deriving (Eq, Ord, Read, Show)

_IndentStyle = Core.Name "hydra.ast.IndentStyle"

_IndentStyle_allLines = Core.Name "allLines"

_IndentStyle_subsequentLines = Core.Name "subsequentLines"

-- | An expression indented in a certain style
data IndentedExpression =
  IndentedExpression {
    -- | The indentation style
    indentedExpressionStyle :: IndentStyle,
    -- | The expression to be indented
    indentedExpressionExpr :: Expr}
  deriving (Eq, Ord, Read, Show)

_IndentedExpression = Core.Name "hydra.ast.IndentedExpression"

_IndentedExpression_style = Core.Name "style"

_IndentedExpression_expr = Core.Name "expr"

-- | An operator symbol
data Op =
  Op {
    -- | The operator symbol
    opSymbol :: Symbol,
    -- | The padding around the operator
    opPadding :: Padding,
    -- | The precedence of the operator
    opPrecedence :: Precedence,
    -- | The associativity of the operator
    opAssociativity :: Associativity}
  deriving (Eq, Ord, Read, Show)

_Op = Core.Name "hydra.ast.Op"

_Op_symbol = Core.Name "symbol"

_Op_padding = Core.Name "padding"

_Op_precedence = Core.Name "precedence"

_Op_associativity = Core.Name "associativity"

-- | An operator expression
data OpExpr =
  OpExpr {
    -- | The operator
    opExprOp :: Op,
    -- | The left-hand side operand
    opExprLhs :: Expr,
    -- | The right-hand side operand
    opExprRhs :: Expr}
  deriving (Eq, Ord, Read, Show)

_OpExpr = Core.Name "hydra.ast.OpExpr"

_OpExpr_op = Core.Name "op"

_OpExpr_lhs = Core.Name "lhs"

_OpExpr_rhs = Core.Name "rhs"

-- | Left and right padding for an operator
data Padding =
  Padding {
    -- | Padding to the left of the operator
    paddingLeft :: Ws,
    -- | Padding to the right of the operator
    paddingRight :: Ws}
  deriving (Eq, Ord, Read, Show)

_Padding = Core.Name "hydra.ast.Padding"

_Padding_left = Core.Name "left"

_Padding_right = Core.Name "right"

-- | Operator precedence
newtype Precedence =
  Precedence {
    unPrecedence :: Int}
  deriving (Eq, Ord, Read, Show)

_Precedence = Core.Name "hydra.ast.Precedence"

-- | A sequence of expressions joined by a separator operator. Unlike OpExpr, parenthesize ignores SeqExpr boundaries.
data SeqExpr =
  SeqExpr {
    -- | The separator operator
    seqExprOp :: Op,
    -- | The expressions to join
    seqExprElements :: [Expr]}
  deriving (Eq, Ord, Read, Show)

_SeqExpr = Core.Name "hydra.ast.SeqExpr"

_SeqExpr_op = Core.Name "op"

_SeqExpr_elements = Core.Name "elements"

-- | Any symbol
newtype Symbol =
  Symbol {
    unSymbol :: String}
  deriving (Eq, Ord, Read, Show)

_Symbol = Core.Name "hydra.ast.Symbol"

-- | One of several classes of whitespace
data Ws =
  -- | No whitespace
  WsNone |
  -- | A single space
  WsSpace |
  -- | A line break
  WsBreak |
  -- | A line break followed by indentation
  WsBreakAndIndent String |
  -- | Two line breaks
  WsDoubleBreak
  deriving (Eq, Ord, Read, Show)

_Ws = Core.Name "hydra.ast.Ws"

_Ws_none = Core.Name "none"

_Ws_space = Core.Name "space"

_Ws_break = Core.Name "break"

_Ws_breakAndIndent = Core.Name "breakAndIndent"

_Ws_doubleBreak = Core.Name "doubleBreak"