packages feed

hydra-0.13.0: src/gen-main/haskell/Hydra/Encode/Ast.hs

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

-- | Term encoders for hydra.ast

module Hydra.Encode.Ast where

import qualified Hydra.Ast as Ast
import qualified Hydra.Core as Core
import qualified Hydra.Lib.Maybes as Maybes
import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
import qualified Data.ByteString as B
import qualified Data.Int as I
import qualified Data.List as L
import qualified Data.Map as M
import qualified Data.Set as S

associativity :: (Ast.Associativity -> Core.Term)
associativity x = case x of
  Ast.AssociativityNone -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.ast.Associativity"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "none"),
      Core.fieldTerm = Core.TermUnit}}))
  Ast.AssociativityLeft -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.ast.Associativity"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "left"),
      Core.fieldTerm = Core.TermUnit}}))
  Ast.AssociativityRight -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.ast.Associativity"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "right"),
      Core.fieldTerm = Core.TermUnit}}))
  Ast.AssociativityBoth -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.ast.Associativity"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "both"),
      Core.fieldTerm = Core.TermUnit}}))

blockStyle :: (Ast.BlockStyle -> Core.Term)
blockStyle x = (Core.TermRecord (Core.Record {
  Core.recordTypeName = (Core.Name "hydra.ast.BlockStyle"),
  Core.recordFields = [
    Core.Field {
      Core.fieldName = (Core.Name "indent"),
      Core.fieldTerm = ((\opt -> Core.TermMaybe (Maybes.map (\x -> Core.TermLiteral (Core.LiteralString x)) opt)) (Ast.blockStyleIndent x))},
    Core.Field {
      Core.fieldName = (Core.Name "newlineBeforeContent"),
      Core.fieldTerm = ((\x -> Core.TermLiteral (Core.LiteralBoolean x)) (Ast.blockStyleNewlineBeforeContent x))},
    Core.Field {
      Core.fieldName = (Core.Name "newlineAfterContent"),
      Core.fieldTerm = ((\x -> Core.TermLiteral (Core.LiteralBoolean x)) (Ast.blockStyleNewlineAfterContent x))}]}))

bracketExpr :: (Ast.BracketExpr -> Core.Term)
bracketExpr x = (Core.TermRecord (Core.Record {
  Core.recordTypeName = (Core.Name "hydra.ast.BracketExpr"),
  Core.recordFields = [
    Core.Field {
      Core.fieldName = (Core.Name "brackets"),
      Core.fieldTerm = (brackets (Ast.bracketExprBrackets x))},
    Core.Field {
      Core.fieldName = (Core.Name "enclosed"),
      Core.fieldTerm = (expr (Ast.bracketExprEnclosed x))},
    Core.Field {
      Core.fieldName = (Core.Name "style"),
      Core.fieldTerm = (blockStyle (Ast.bracketExprStyle x))}]}))

brackets :: (Ast.Brackets -> Core.Term)
brackets x = (Core.TermRecord (Core.Record {
  Core.recordTypeName = (Core.Name "hydra.ast.Brackets"),
  Core.recordFields = [
    Core.Field {
      Core.fieldName = (Core.Name "open"),
      Core.fieldTerm = (symbol (Ast.bracketsOpen x))},
    Core.Field {
      Core.fieldName = (Core.Name "close"),
      Core.fieldTerm = (symbol (Ast.bracketsClose x))}]}))

expr :: (Ast.Expr -> Core.Term)
expr x = case x of
  Ast.ExprConst v1 -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.ast.Expr"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "const"),
      Core.fieldTerm = (symbol v1)}}))
  Ast.ExprIndent v1 -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.ast.Expr"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "indent"),
      Core.fieldTerm = (indentedExpression v1)}}))
  Ast.ExprOp v1 -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.ast.Expr"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "op"),
      Core.fieldTerm = (opExpr v1)}}))
  Ast.ExprBrackets v1 -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.ast.Expr"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "brackets"),
      Core.fieldTerm = (bracketExpr v1)}}))

indentedExpression :: (Ast.IndentedExpression -> Core.Term)
indentedExpression x = (Core.TermRecord (Core.Record {
  Core.recordTypeName = (Core.Name "hydra.ast.IndentedExpression"),
  Core.recordFields = [
    Core.Field {
      Core.fieldName = (Core.Name "style"),
      Core.fieldTerm = (indentStyle (Ast.indentedExpressionStyle x))},
    Core.Field {
      Core.fieldName = (Core.Name "expr"),
      Core.fieldTerm = (expr (Ast.indentedExpressionExpr x))}]}))

indentStyle :: (Ast.IndentStyle -> Core.Term)
indentStyle x = case x of
  Ast.IndentStyleAllLines v1 -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.ast.IndentStyle"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "allLines"),
      Core.fieldTerm = (Core.TermLiteral (Core.LiteralString v1))}}))
  Ast.IndentStyleSubsequentLines v1 -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.ast.IndentStyle"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "subsequentLines"),
      Core.fieldTerm = (Core.TermLiteral (Core.LiteralString v1))}}))

op :: (Ast.Op -> Core.Term)
op x = (Core.TermRecord (Core.Record {
  Core.recordTypeName = (Core.Name "hydra.ast.Op"),
  Core.recordFields = [
    Core.Field {
      Core.fieldName = (Core.Name "symbol"),
      Core.fieldTerm = (symbol (Ast.opSymbol x))},
    Core.Field {
      Core.fieldName = (Core.Name "padding"),
      Core.fieldTerm = (padding (Ast.opPadding x))},
    Core.Field {
      Core.fieldName = (Core.Name "precedence"),
      Core.fieldTerm = (precedence (Ast.opPrecedence x))},
    Core.Field {
      Core.fieldName = (Core.Name "associativity"),
      Core.fieldTerm = (associativity (Ast.opAssociativity x))}]}))

opExpr :: (Ast.OpExpr -> Core.Term)
opExpr x = (Core.TermRecord (Core.Record {
  Core.recordTypeName = (Core.Name "hydra.ast.OpExpr"),
  Core.recordFields = [
    Core.Field {
      Core.fieldName = (Core.Name "op"),
      Core.fieldTerm = (op (Ast.opExprOp x))},
    Core.Field {
      Core.fieldName = (Core.Name "lhs"),
      Core.fieldTerm = (expr (Ast.opExprLhs x))},
    Core.Field {
      Core.fieldName = (Core.Name "rhs"),
      Core.fieldTerm = (expr (Ast.opExprRhs x))}]}))

padding :: (Ast.Padding -> Core.Term)
padding x = (Core.TermRecord (Core.Record {
  Core.recordTypeName = (Core.Name "hydra.ast.Padding"),
  Core.recordFields = [
    Core.Field {
      Core.fieldName = (Core.Name "left"),
      Core.fieldTerm = (ws (Ast.paddingLeft x))},
    Core.Field {
      Core.fieldName = (Core.Name "right"),
      Core.fieldTerm = (ws (Ast.paddingRight x))}]}))

precedence :: (Ast.Precedence -> Core.Term)
precedence x = (Core.TermWrap (Core.WrappedTerm {
  Core.wrappedTermTypeName = (Core.Name "hydra.ast.Precedence"),
  Core.wrappedTermBody = ((\x -> Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 x))) (Ast.unPrecedence x))}))

symbol :: (Ast.Symbol -> Core.Term)
symbol x = (Core.TermWrap (Core.WrappedTerm {
  Core.wrappedTermTypeName = (Core.Name "hydra.ast.Symbol"),
  Core.wrappedTermBody = ((\x -> Core.TermLiteral (Core.LiteralString x)) (Ast.unSymbol x))}))

ws :: (Ast.Ws -> Core.Term)
ws x = case x of
  Ast.WsNone -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.ast.Ws"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "none"),
      Core.fieldTerm = Core.TermUnit}}))
  Ast.WsSpace -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.ast.Ws"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "space"),
      Core.fieldTerm = Core.TermUnit}}))
  Ast.WsBreak -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.ast.Ws"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "break"),
      Core.fieldTerm = Core.TermUnit}}))
  Ast.WsBreakAndIndent v1 -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.ast.Ws"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "breakAndIndent"),
      Core.fieldTerm = (Core.TermLiteral (Core.LiteralString v1))}}))
  Ast.WsDoubleBreak -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.ast.Ws"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "doubleBreak"),
      Core.fieldTerm = Core.TermUnit}}))