on 42f3721 help sign in
elk/compiler/src/AST/Valid.hs
125 lines 2.7 kB history raw
1{-# OPTIONS_GHC -Wall #-}
2{-# LANGUAGE OverloadedStrings #-}
3module AST.Valid
4 ( Expr, Expr_(..)
5 , Def(..)
6 , Module(..)
7 , Decl(..)
8 , Union(..)
9 , Alias(..)
10 , Binop(..)
11 , Effects(..)
12 , Port(..)
13 , Manager(..)
14 , defaultModule
15 )
16 where
19import qualified Data.Map as Map
20import Data.Name (Name)
21import Data.Text (Text)
22import Data.Utf8 (Utf8)
24import qualified AST.Utils.Binop as Binop
25import qualified AST.Source as Src
26import qualified AST.Utils.Shader as Shader
27import qualified Reporting.Annotation as A
28import qualified Reporting.Region as R
32-- EXPRESSIONS
35type Expr = A.Located Expr_
38data Expr_
39 = Chr Utf8
40 | Str Utf8
41 | Int Int
42 | Float Double
43 | Var Src.VarType Name
44 | VarQual Src.VarType Name Name
45 | List [Expr]
46 | Op Name
47 | Negate Expr
48 | Binops [(Expr, A.Located Name)] Expr
49 | Lambda [Src.Pattern] Expr
50 | Call Expr [Expr]
51 | If [(Expr, Expr)] Expr
52 | Let [Def] Expr
53 | Case Expr [(Src.Pattern, Expr)]
54 | Accessor Name
55 | Access Expr (A.Located Name)
56 | Update (A.Located Name) [(A.Located Name, Expr)]
57 | Record [(A.Located Name, Expr)]
58 | Unit
59 | Tuple Expr Expr [Expr]
60 | Shader Text Text Shader.Shader
64-- DEFINITIONS
67data Def
68 = Define R.Region (A.Located Name) [Src.Pattern] Expr (Maybe Src.Type)
69 | Destruct R.Region Src.Pattern Expr
73-- MODULE
76data Module =
77 Module
78 { _name :: Name
79 , _overview :: Src.Docs
80 , _docs :: Map.Map Name Text
81 , _exports :: A.Located Src.Exposing
82 , _imports :: [Src.Import]
83 , _decls :: [A.Located Decl]
84 , _unions :: [Union]
85 , _aliases :: [Alias]
86 , _binop :: [Binop]
87 , _effects :: Effects
88 }
91data Decl = Decl (A.Located Name) [Src.Pattern] Expr (Maybe Src.Type)
92data Union = Union R.Region (A.Located Name) [A.Located Name] [(A.Located Name, [Src.Type])]
93data Alias = Alias R.Region (A.Located Name) [A.Located Name] Src.Type
94data Binop = Binop Name Binop.Associativity Binop.Precedence Name
97data Effects
98 = NoEffects
99 | Ports [Port]
100 | Manager R.Region Manager
103data Manager
104 = Cmd (A.Located Name)
105 | Sub (A.Located Name)
106 | Fx (A.Located Name) (A.Located Name)
109data Port = Port (A.Located Name) Src.Type
112defaultModule :: Map.Map Name Text -> [Src.Import] -> [A.Located Decl] -> [Union] -> [Alias] -> [Binop] -> Module
113defaultModule docs imports decls unions aliases binop =
114 Module
115 { _name = "Main"
116 , _overview = Src.NoDocs R.one
117 , _docs = docs
118 , _exports = A.At R.one Src.Open
119 , _imports = imports
120 , _decls = decls
121 , _unions = unions
122 , _aliases = aliases
123 , _binop = binop
124 , _effects = NoEffects
125 }