on 32ff950 help sign in
elk/compiler/src/AST/Source.hs
193 lines 3.2 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.Text (Text)
24import qualified AST.Utils.Binop as Binop
25import qualified AST.Utils.Shader as Shader
26import qualified Elm.Name as N
27import qualified Reporting.Annotation as A
28import qualified Reporting.Region as R
32-- EXPRESSIONS
35type Expr = A.Located Expr_
38data Expr_
39 = Chr Text
40 | Str Text
41 | Int Int
42 | Float Double
43 | Var VarType N.Name
44 | VarQual VarType N.Name N.Name
45 | List [Expr]
46 | Op N.Name
47 | Negate Expr
48 | Binops [(Expr, A.Located N.Name)] Expr
49 | Lambda [Pattern] Expr
50 | Call Expr [Expr]
51 | If [(Expr, Expr)] Expr
52 | Let [A.Located Def] Expr
53 | Case Expr [(Pattern, Expr)]
54 | Accessor N.Name
55 | Access Expr N.Name
56 | Update (A.Located N.Name) [(A.Located N.Name, Expr)]
57 | Record [(A.Located N.Name, Expr)]
58 | Unit
59 | Tuple Expr Expr [Expr]
60 | Shader Text Text Shader.Shader
63data VarType = Value | Ctor
67-- DEFINITIONS
70data Def
71 = Annotate N.Name Type
72 | Define (A.Located N.Name) [Pattern] Expr
73 | Destruct Pattern Expr
77-- PATTERN
80type Pattern = A.Located Pattern_
83data Pattern_
84 = PAnything
85 | PVar N.Name
86 | PRecord [A.Located N.Name]
87 | PAlias Pattern (A.Located N.Name)
88 | PUnit
89 | PTuple Pattern Pattern [Pattern]
90 | PCtor R.Region N.Name [Pattern]
91 | PCtorQual R.Region N.Name N.Name [Pattern]
92 | PList [Pattern]
93 | PCons Pattern Pattern
94 | PChr Text
95 | PStr Text
96 | PInt Int
100-- TYPE
103type Type =
104 A.Located Type_
107data Type_
108 = TLambda Type Type
109 | TVar N.Name
110 | TType R.Region N.Name [Type]
111 | TTypeQual R.Region N.Name N.Name [Type]
112 | TRecord [(A.Located N.Name, Type)] (Maybe (A.Located N.Name))
113 | TUnit
114 | TTuple Type Type [Type]
118-- DECLARATIONS
121type Decl = A.Located Decl_
124data Decl_
125 = Union (A.Located N.Name) [A.Located N.Name] [(A.Located N.Name, [Type])]
126 | Alias (A.Located N.Name) [A.Located N.Name] Type
127 | Binop N.Name Binop.Associativity Binop.Precedence N.Name
128 | Port (A.Located N.Name) Type
129 | Docs Text
130 | Annotation (A.Located N.Name) Type
131 | Definition (A.Located N.Name) [Pattern] Expr
135-- MODULE
138data Module decls =
139 Module (Maybe Header) [Import] decls
142data Header
143 = Header
144 { _name :: N.Name
145 , _effects :: Effects
146 , _exports :: A.Located Exposing
147 , _docs :: Docs
148 }
151data Import =
152 Import
153 { _import :: A.Located N.Name
154 , _alias :: Maybe N.Name
155 , _exposing :: Exposing
156 }
159data Docs
160 = NoDocs R.Region
161 | YesDocs R.Region B.ByteString
164data Effects
165 = NoEffects
166 | Ports R.Region
167 | Manager R.Region Manager
170data Manager
171 = Cmd (A.Located N.Name)
172 | Sub (A.Located N.Name)
173 | Fx (A.Located N.Name) (A.Located N.Name)
177-- EXPOSING
180data Exposing
181 = Open
182 | Explicit ![A.Located Exposed]
185data Exposed
186 = Lower !N.Name
187 | Upper !N.Name !Privacy
188 | Operator !N.Name
191data Privacy
192 = Public
193 | Private