on 7dfbc30 help sign in
elk/src/AST/Source.hs
181 lines 3.0 kB history raw
1{-# OPTIONS_GHC -Wall #-}
2module AST.Source
3 ( Expr, Expr_(..)
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 (Maybe N.Name) N.Name
43 | List [Expr]
44 | Op N.Name
45 | Negate Expr
46 | Binops [(Expr, A.Located N.Name)] Expr
47 | Lambda [Pattern] Expr
48 | Call Expr [Expr]
49 | If [(Expr, Expr)] Expr
50 | Let [A.Located Def] Expr
51 | Case Expr [(Pattern, Expr)]
52 | Accessor N.Name
53 | Access Expr N.Name
54 | Update (A.Located N.Name) [(A.Located N.Name, Expr)]
55 | Record [(A.Located N.Name, Expr)]
56 | Unit
57 | Tuple Expr Expr [Expr]
58 | Shader Text Text Shader.Shader
62-- DEFINITIONS
65data Def
66 = Annotate N.Name Type
67 | Define (A.Located N.Name) [Pattern] Expr
68 | Destruct Pattern Expr
72-- PATTERN
75type Pattern = A.Located Pattern_
78data Pattern_
79 = PAnything
80 | PVar N.Name
81 | PRecord [A.Located N.Name]
82 | PAlias Pattern (A.Located N.Name)
83 | PUnit
84 | PTuple Pattern Pattern [Pattern]
85 | PCtor R.Region (Maybe N.Name) N.Name [Pattern]
86 | PList [Pattern]
87 | PCons Pattern Pattern
88 | PChr Text
89 | PStr Text
90 | PInt Int
94-- TYPE
97type Type =
98 A.Located Type_
101data Type_
102 = TLambda Type Type
103 | TVar N.Name
104 | TType R.Region (Maybe N.Name) N.Name [Type]
105 | TRecord [(A.Located N.Name, Type)] (Maybe Type)
106 | TUnit
107 | TTuple Type Type [Type]
111-- DECLARATIONS
114type Decl = A.Located Decl_
117data Decl_
118 = Union (A.Located N.Name) [A.Located N.Name] [(A.Located N.Name, [Type])]
119 | Alias (A.Located N.Name) [A.Located N.Name] Type
120 | Binop N.Name Binop.Associativity Binop.Precedence N.Name
121 | Port (A.Located N.Name) Type
122 | Docs Text
123 | Annotation (A.Located N.Name) Type
124 | Definition (A.Located N.Name) [Pattern] Expr
128-- MODULE
131data Module decls =
132 Module (Maybe Header) [Import] decls
135data Header
136 = Header
137 { _name :: N.Name
138 , _effects :: Effects
139 , _exports :: Exposing
140 , _docs :: Maybe (A.Located B.ByteString)
141 }
144data Import =
145 Import
146 { _import :: A.Located N.Name
147 , _alias :: Maybe N.Name
148 , _exposing :: Exposing
149 }
152data Effects
153 = NoEffects
154 | Ports R.Region
155 | Manager R.Region Manager
158data Manager
159 = Cmd (A.Located N.Name)
160 | Sub (A.Located N.Name)
161 | Fx (A.Located N.Name) (A.Located N.Name)
165-- EXPOSING
168data Exposing
169 = Open
170 | Explicit ![A.Located Exposed]
173data Exposed
174 = Lower !N.Name
175 | Upper !N.Name !Privacy
176 | Operator !N.Name
179data Privacy
180 = Public
181 | Private