on 5366b91 help sign in
elk/src/AST/Source.hs
187 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 , Import(..)
11 , Effects(..)
12 , Manager(..)
13 , Exposing(..)
14 , Exposed(..)
15 , Privacy(..)
16 )
17 where
20import qualified Data.ByteString as B
21import Data.Text (Text)
23import qualified AST.Utils.Binop as Binop
24import qualified AST.Utils.Shader as Shader
25import qualified Elm.Name as N
26import qualified Reporting.Annotation as A
27import qualified Reporting.Region as R
31-- EXPRESSIONS
34type Expr = A.Located Expr_
37data Expr_
38 = Chr Text
39 | Str Text
40 | Int Int
41 | Float Double
42 | Var VarType N.Name
43 | VarQual VarType N.Name N.Name
44 | List [Expr]
45 | Op N.Name
46 | Negate Expr
47 | Binops [(Expr, A.Located N.Name)] Expr
48 | Lambda [Pattern] Expr
49 | Call Expr [Expr]
50 | If [(Expr, Expr)] Expr
51 | Let [A.Located Def] Expr
52 | Case Expr [(Pattern, Expr)]
53 | Accessor N.Name
54 | Access Expr N.Name
55 | Update (A.Located N.Name) [(A.Located N.Name, Expr)]
56 | Record [(A.Located N.Name, Expr)]
57 | Unit
58 | Tuple Expr Expr [Expr]
59 | Shader Text Text Shader.Shader
62data VarType = Value | Ctor
66-- DEFINITIONS
69data Def
70 = Annotate N.Name Type
71 | Define (A.Located N.Name) [Pattern] Expr
72 | Destruct Pattern Expr
76-- PATTERN
79type Pattern = A.Located Pattern_
82data Pattern_
83 = PAnything
84 | PVar N.Name
85 | PRecord [A.Located N.Name]
86 | PAlias Pattern (A.Located N.Name)
87 | PUnit
88 | PTuple Pattern Pattern [Pattern]
89 | PCtor R.Region N.Name [Pattern]
90 | PCtorQual R.Region N.Name N.Name [Pattern]
91 | PList [Pattern]
92 | PCons Pattern Pattern
93 | PChr Text
94 | PStr Text
95 | PInt Int
99-- TYPE
102type Type =
103 A.Located Type_
106data Type_
107 = TLambda Type Type
108 | TVar N.Name
109 | TType R.Region N.Name [Type]
110 | TTypeQual R.Region N.Name N.Name [Type]
111 | TRecord [(A.Located N.Name, Type)] (Maybe Type)
112 | TUnit
113 | TTuple Type Type [Type]
117-- DECLARATIONS
120type Decl = A.Located Decl_
123data Decl_
124 = Union (A.Located N.Name) [A.Located N.Name] [(A.Located N.Name, [Type])]
125 | Alias (A.Located N.Name) [A.Located N.Name] Type
126 | Binop N.Name Binop.Associativity Binop.Precedence N.Name
127 | Port (A.Located N.Name) Type
128 | Docs Text
129 | Annotation (A.Located N.Name) Type
130 | Definition (A.Located N.Name) [Pattern] Expr
134-- MODULE
137data Module decls =
138 Module (Maybe Header) [Import] decls
141data Header
142 = Header
143 { _name :: N.Name
144 , _effects :: Effects
145 , _exports :: Exposing
146 , _docs :: Maybe (A.Located B.ByteString)
147 }
150data Import =
151 Import
152 { _import :: A.Located N.Name
153 , _alias :: Maybe N.Name
154 , _exposing :: Exposing
155 }
158data Effects
159 = NoEffects
160 | Ports R.Region
161 | Manager R.Region Manager
164data Manager
165 = Cmd (A.Located N.Name)
166 | Sub (A.Located N.Name)
167 | Fx (A.Located N.Name) (A.Located N.Name)
171-- EXPOSING
174data Exposing
175 = Open
176 | Explicit ![A.Located Exposed]
179data Exposed
180 = Lower !N.Name
181 | Upper !N.Name !Privacy
182 | Operator !N.Name
185data Privacy
186 = Public
187 | Private