on 42f3721 help sign in
elk/compiler/src/AST/Source.hs
194 lines 3.1 kB history raw
1{-# OPTIONS_GHC -Wall #-}
2module AST.Source
3 ( Expr, Expr_(..), VarType(..)
4 , Decl, Decl_(..)
5 , Def(..)
6 , Pattern, Pattern_(..)
7 , Type, Type_(..)
8 , Module(..)
9 , Header(..)
10 , Docs(..)
11 , Import(..)
12 , Effects(..)
13 , Manager(..)
14 , Exposing(..)
15 , Exposed(..)
16 , Privacy(..)
17 )
18 where
21import qualified Data.ByteString as B
22import Data.Name (Name)
23import Data.Text (Text)
24import Data.Utf8 (Utf8)
26import qualified AST.Utils.Binop as Binop
27import qualified AST.Utils.Shader as Shader
28import qualified Reporting.Annotation as A
29import qualified Reporting.Region as R
33-- EXPRESSIONS
36type Expr = A.Located Expr_
39data Expr_
40 = Chr Utf8
41 | Str Utf8
42 | Int Int
43 | Float Double
44 | Var VarType Name
45 | VarQual VarType Name Name
46 | List [Expr]
47 | Op Name
48 | Negate Expr
49 | Binops [(Expr, A.Located Name)] Expr
50 | Lambda [Pattern] Expr
51 | Call Expr [Expr]
52 | If [(Expr, Expr)] Expr
53 | Let [A.Located Def] Expr
54 | Case Expr [(Pattern, Expr)]
55 | Accessor Name
56 | Access Expr (A.Located Name)
57 | Update (A.Located Name) [(A.Located Name, Expr)]
58 | Record [(A.Located Name, Expr)]
59 | Unit
60 | Tuple Expr Expr [Expr]
61 | Shader Text Text Shader.Shader
64data VarType = Value | Ctor
68-- DEFINITIONS
71data Def
72 = Annotate Name Type
73 | Define (A.Located Name) [Pattern] Expr
74 | Destruct Pattern Expr
78-- PATTERN
81type Pattern = A.Located Pattern_
84data Pattern_
85 = PAnything
86 | PVar Name
87 | PRecord [A.Located Name]
88 | PAlias Pattern (A.Located Name)
89 | PUnit
90 | PTuple Pattern Pattern [Pattern]
91 | PCtor R.Region Name [Pattern]
92 | PCtorQual R.Region Name Name [Pattern]
93 | PList [Pattern]
94 | PCons Pattern Pattern
95 | PChr Utf8
96 | PStr Utf8
97 | PInt Int
101-- TYPE
104type Type =
105 A.Located Type_
108data Type_
109 = TLambda Type Type
110 | TVar Name
111 | TType R.Region Name [Type]
112 | TTypeQual R.Region Name Name [Type]
113 | TRecord [(A.Located Name, Type)] (Maybe (A.Located Name))
114 | TUnit
115 | TTuple Type Type [Type]
119-- DECLARATIONS
122type Decl = A.Located Decl_
125data Decl_
126 = Union (A.Located Name) [A.Located Name] [(A.Located Name, [Type])]
127 | Alias (A.Located Name) [A.Located Name] Type
128 | Binop Name Binop.Associativity Binop.Precedence Name
129 | Port (A.Located Name) Type
130 | Docs Text
131 | Annotation (A.Located Name) Type
132 | Definition (A.Located Name) [Pattern] Expr
136-- MODULE
139data Module decls =
140 Module (Maybe Header) [Import] decls
143data Header
144 = Header
145 { _name :: Name
146 , _effects :: Effects
147 , _exports :: A.Located Exposing
148 , _docs :: Docs
149 }
152data Import =
153 Import
154 { _import :: A.Located Name
155 , _alias :: Maybe Name
156 , _exposing :: Exposing
157 }
160data Docs
161 = NoDocs R.Region
162 | YesDocs R.Region B.ByteString
165data Effects
166 = NoEffects
167 | Ports R.Region
168 | Manager R.Region Manager
171data Manager
172 = Cmd (A.Located Name)
173 | Sub (A.Located Name)
174 | Fx (A.Located Name) (A.Located Name)
178-- EXPOSING
181data Exposing
182 = Open
183 | Explicit ![A.Located Exposed]
186data Exposed
187 = Lower !Name
188 | Upper !Name !Privacy
189 | Operator !Name
192data Privacy
193 = Public
194 | Private