on 8a89c86 help sign in
elk/src/AST/Source.hs
193 lines 3.3 kB history raw
1{-# OPTIONS_GHC -Wall #-}
2{-# LANGUAGE OverloadedStrings #-}
3module AST.Source
4 ( Expr, Expr_(..)
5 , Decl, Decl_(..)
6 , Def(..)
7 , Pattern, Pattern_(..)
8 , Type, Type_(..)
9 , Module(..)
10 , Import(..)
11 , Effects(..)
12 , Manager(..)
13 , defaultModule
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 (Maybe 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
63-- DEFINITIONS
66data Def
67 = Annotate N.Name Type
68 | Define (A.Located N.Name) [Pattern] Expr
69 | Destruct Pattern Expr
73-- PATTERN
76type Pattern = A.Located Pattern_
79data Pattern_
80 = PAnything
81 | PVar N.Name
82 | PRecord [A.Located N.Name]
83 | PAlias Pattern (A.Located N.Name)
84 | PUnit
85 | PTuple Pattern Pattern [Pattern]
86 | PCtor R.Region (Maybe N.Name) N.Name [Pattern]
87 | PList [Pattern]
88 | PCons Pattern Pattern
89 | PChr Text
90 | PStr Text
91 | PInt Int
95-- TYPE
98type Type =
99 A.Located Type_
102data Type_
103 = TLambda Type Type
104 | TVar N.Name
105 | TType R.Region (Maybe N.Name) N.Name [Type]
106 | TRecord [(A.Located N.Name, Type)] (Maybe Type)
107 | TUnit
108 | TTuple Type Type [Type]
112-- DECLARATIONS
115type Decl = A.Located Decl_
118data Decl_
119 = Union (A.Located N.Name) [A.Located N.Name] [(A.Located N.Name, [Type])]
120 | Alias (A.Located N.Name) [A.Located N.Name] Type
121 | Binop (A.Located N.Name) Binop.Associativity Binop.Precedence N.Name
122 | Port (A.Located N.Name) Type
123 | Docs Text
124 | Annotation (A.Located N.Name) Type
125 | Definition (A.Located N.Name) [Pattern] Expr
129-- MODULE
132data Module decls =
133 Module
134 { _name :: N.Name
135 , _effects :: Effects
136 , _docs :: A.Located (Maybe B.ByteString)
137 , _exports :: Exposing
138 , _imports :: [Import]
139 , _decls :: decls
140 }
143data Import =
144 Import
145 { _import :: A.Located N.Name
146 , _alias :: Maybe N.Name
147 , _exposing :: Exposing
148 }
151data Effects
152 = NoEffects
153 | Ports R.Region
154 | Manager R.Region Manager
157data Manager
158 = Cmd (A.Located N.Name)
159 | Sub (A.Located N.Name)
160 | Fx (A.Located N.Name) (A.Located N.Name)
163defaultModule :: [Import] -> decls -> Module decls
164defaultModule imports decls =
165 let zero = R.Position 1 1 in
166 Module
167 { _name = "Main"
168 , _effects = NoEffects
169 , _docs = A.at zero zero Nothing
170 , _exports = Open
171 , _imports = imports
172 , _decls = decls
173 }
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