diff options
| author | Tom Smeding <tom@tomsmeding.com> | 2024-02-25 21:01:13 +0100 | 
|---|---|---|
| committer | Tom Smeding <tom@tomsmeding.com> | 2024-02-25 21:01:13 +0100 | 
| commit | f72bf16e2edc8d654e661cd59f820409219e5f27 (patch) | |
| tree | 2986fcd5421c474f50b76214eccea93cb74850e0 /src/HSVIS/AST.hs | |
| parent | b0c81ee7def783037b514af9fdeab06f7e3bdb13 (diff) | |
Add HSVIS module prefix
Diffstat (limited to 'src/HSVIS/AST.hs')
| -rw-r--r-- | src/HSVIS/AST.hs | 68 | 
1 files changed, 68 insertions, 0 deletions
| diff --git a/src/HSVIS/AST.hs b/src/HSVIS/AST.hs new file mode 100644 index 0000000..5a90205 --- /dev/null +++ b/src/HSVIS/AST.hs @@ -0,0 +1,68 @@ +module HSVIS.AST where + +import Data.List.NonEmpty (NonEmpty) + +import HSVIS.Pretty + + +newtype Name = Name String +  deriving (Show, Eq) + +data Program t = Program [DataDef] [FunDef t] +  deriving (Show) + +data DataDef = DataDef Name [Name] [(Name, [Type])] +  deriving (Show) + +data FunDef t = FunDef Name (Maybe Type) (NonEmpty (FunEq t)) +  deriving (Show) + +data FunEq t = FunEq Name [Pattern t] (RHS t) +  deriving (Show) + +data Type +  = TApp Type [Type] +  | TTup [Type] +  | TList Type +  | TFun Type Type +  | TCon Name +  | TVar Name +  deriving (Show) + +data Pattern t +  = PWildcard t +  | PVar t Name +  | PAs t Name (Pattern t) +  | PCon t Name [Pattern t] +  | POp t (Pattern t) Operator (Pattern t) +  | PList t [Pattern t] +  | PTup t [Pattern t] +  deriving (Show) + +data RHS t +  = Guarded [(Expr t, Expr t)]  -- currently not parsed +  | Plain (Expr t) +  deriving (Show) + +data Expr t +  = ELit t Literal +  | EVar t Name +  | ECon t Name +  | EList t [Expr t] +  | ETup t [Expr t] +  | EApp t (Expr t) [Expr t] +  | EOp t (Expr t) Operator (Expr t) +  | EIf t (Expr t) (Expr t) (Expr t) +  | ECase t (Expr t) [(Pattern t, RHS t)] +  | ELet t [FunDef t] (Expr t) +  deriving (Show) + +data Literal = LInt Integer | LFloat Rational | LChar Char | LString String +  deriving (Show) + +data Operator = OAdd | OSub | OMul | ODiv | OMod | OEqu | OPow +              | OCons +  deriving (Show) + +instance Pretty Name where +  prettysPrec _ (Name n) = showString ("\"" ++ n ++ "\"") | 
