on e28d01e help sign in
elk/src/AST/Expression/Source.hs
176 lines 3.1 kB history raw
1{-# OPTIONS_GHC -Wall #-}
2{-# LANGUAGE OverloadedStrings #-}
3module AST.Expression.Source
4 ( Expr, Expr_(..)
5 , Decl, Decl_(..)
6 , Def(..)
7 , Pattern, Pattern_(..)
8 , Module(..)
9 , Import(..)
10 , Effects(..)
11 , Manager(..)
12 , defaultModule
13 , Exposing(..)
14 , Exposed(..)
15 , Privacy(..)
16 )
17 where
20import qualified Data.ByteString as B
21import Data.Text (Text)
23import qualified AST.Binop as Binop
24import qualified AST.Shader as Shader
25import qualified AST.Type as Type
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.Raw
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-- DECLARATIONS
98type Decl = A.Located Decl_
101data Decl_
102 = Union (A.Located N.Name) [A.Located N.Name] [(A.Located N.Name, [Type.Raw])]
103 | Alias (A.Located N.Name) [A.Located N.Name] Type.Raw
104 | Binop (A.Located N.Name) Binop.Associativity Binop.Precedence N.Name
105 | Port (A.Located N.Name) Type.Raw
106 | Docs Text
107 | Annotation (A.Located N.Name) Type.Raw
108 | Definition (A.Located N.Name) [Pattern] Expr
112-- MODULE
115data Module decls =
116 Module
117 { _name :: N.Name
118 , _effects :: Effects
119 , _docs :: A.Located (Maybe B.ByteString)
120 , _exports :: Exposing
121 , _imports :: [Import]
122 , _decls :: decls
123 }
126data Import =
127 Import
128 { _import :: A.Located N.Name
129 , _alias :: Maybe N.Name
130 , _exposing :: Exposing
131 }
134data Effects
135 = NoEffects
136 | Ports R.Region
137 | Manager R.Region Manager
140data Manager
141 = Cmd (A.Located N.Name)
142 | Sub (A.Located N.Name)
143 | Fx (A.Located N.Name) (A.Located N.Name)
146defaultModule :: [Import] -> decls -> Module decls
147defaultModule imports decls =
148 let zero = R.Position 1 1 in
149 Module
150 { _name = "Main"
151 , _effects = NoEffects
152 , _docs = A.at zero zero Nothing
153 , _exports = Open
154 , _imports = imports
155 , _decls = decls
156 }
160-- EXPOSING
163data Exposing
164 = Open
165 | Explicit ![A.Located Exposed]
168data Exposed
169 = Lower !N.Name
170 | Upper !N.Name !Privacy
171 | Operator !N.Name
174data Privacy
175 = Public
176 | Private