on bfb8eca help sign in
elk/src/AST/Expression/Source.hs
171 lines 3.0 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.Literal as Literal
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 = Literal Literal.Literal
40 | Var (Maybe N.Name) N.Name
41 | List [Expr]
42 | Op N.Name
43 | Negate Expr
44 | Binops [(Expr, A.Located N.Name)] Expr
45 | Lambda [Pattern] Expr
46 | Call Expr [Expr]
47 | If [(Expr, Expr)] Expr
48 | Let [A.Located Def] Expr
49 | Case Expr [(Pattern, Expr)]
50 | Accessor N.Name
51 | Access Expr N.Name
52 | Update (A.Located N.Name) [(A.Located N.Name, Expr)]
53 | Record [(A.Located N.Name, Expr)]
54 | Unit
55 | Tuple Expr Expr [Expr]
56 | GLShader Text Text Literal.Shader
60-- DEFINITIONS
63data Def
64 = Annotate N.Name Type.Raw
65 | Define (A.Located N.Name) [Pattern] Expr
66 | Destruct Pattern Expr
70-- PATTERN
73type Pattern = A.Located Pattern_
76data Pattern_
77 = PAnything
78 | PVar N.Name
79 | PRecord [A.Located N.Name]
80 | PAlias Pattern (A.Located N.Name)
81 | PUnit
82 | PTuple Pattern Pattern [Pattern]
83 | PCtor R.Region (Maybe N.Name) N.Name [Pattern]
84 | PList [Pattern]
85 | PCons Pattern Pattern
86 | PLiteral Literal.Literal
90-- DECLARATIONS
93type Decl = A.Located Decl_
96data Decl_
97 = Union (A.Located N.Name) [A.Located N.Name] [(A.Located N.Name, [Type.Raw])]
98 | Alias (A.Located N.Name) [A.Located N.Name] Type.Raw
99 | Binop (A.Located N.Name) Binop.Associativity Binop.Precedence N.Name
100 | Port (A.Located N.Name) Type.Raw
101 | Docs Text
102 | Annotation (A.Located N.Name) Type.Raw
103 | Definition (A.Located N.Name) [Pattern] Expr
107-- MODULE
110data Module decls =
111 Module
112 { _name :: N.Name
113 , _effects :: Effects
114 , _docs :: A.Located (Maybe B.ByteString)
115 , _exports :: Exposing
116 , _imports :: [Import]
117 , _decls :: decls
118 }
121data Import =
122 Import
123 { _import :: A.Located N.Name
124 , _alias :: Maybe N.Name
125 , _exposing :: Exposing
126 }
129data Effects
130 = NoEffects
131 | Ports R.Region
132 | Effects R.Region Manager
135data Manager
136 = Cmd (A.Located N.Name)
137 | Sub (A.Located N.Name)
138 | Fx (A.Located N.Name) (A.Located N.Name)
141defaultModule :: [Import] -> decls -> Module decls
142defaultModule imports decls =
143 let zero = R.Position 1 1 in
144 Module
145 { _name = "Main"
146 , _effects = NoEffects
147 , _docs = A.at zero zero Nothing
148 , _exports = Open
149 , _imports = imports
150 , _decls = decls
151 }
155-- EXPOSING
158data Exposing
159 = Open
160 | Explicit ![A.Located Exposed]
163data Exposed
164 = Lower !N.Name
165 | Upper !N.Name !Privacy
166 | Operator !N.Name
169data Privacy
170 = Public
171 | Private