snail-0.1.2.1: A programming language with no semantics
Safe HaskellSafe-Inferred
LanguageHaskell2010

Snail.Ast

Synopsis

Constructors for AST

data Bracket Source #

The bracket used to surround the s-expression

Constructors

Round 
Square 
Curly 

Instances

Instances details
Show Bracket Source # 
Instance details

Defined in Snail.Ast

Eq Bracket Source # 
Instance details

Defined in Snail.Ast

Methods

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

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

data SnailAst Source #

Instances

Instances details
Show SnailAst Source # 
Instance details

Defined in Snail.Ast

Eq SnailAst Source # 
Instance details

Defined in Snail.Ast

Utilities for AST

unwrap :: SnailAst -> SnailAst Source #

Unwrap nested s-expressions, this is very useful when you are converting SnailAst to your own AST.

You'll likely have a function `snailAstToMyAst :: SnailAst -> m MyAst` where m is ExceptT or MonadExcept. Then, your final case statement should unwrap nested expressions to their base with,

snailAstToMyAst . unwrap . SExpression initialChar bracket $ unwrap $ exprs`

For example, `((read))` will become `SExpression _ _ [Lexeme (_, "read")]` which your AST converter should handle.