on 6c19c6e help sign in
elk/compiler/src/AST/Source.hs
209 lines 3.6 kB history raw
1{-# OPTIONS_GHC -Wall #-}
2module AST.Source
3 ( Expr, Expr_(..), VarType(..)
4 , Def(..)
5 , Pattern, Pattern_(..)
6 , Type, Type_(..)
7 , Module(..)
8 , getName
9 , getImportName
10 , Import(..)
11 , Value(..)
12 , Union(..)
13 , Alias(..)
14 , Infix(..)
15 , Port(..)
16 , Effects(..)
17 , Manager(..)
18 , Docs(..)
19 , Comment(..)
20 , Exposing(..)
21 , Exposed(..)
22 , Privacy(..)
23 )
24 where
27import Data.Name (Name)
28import qualified Data.Name as Name
30import qualified AST.Utils.Binop as Binop
31import qualified AST.Utils.Shader as Shader
32import qualified Elm.Float as EF
33import qualified Elm.String as ES
34import qualified Parse.Primitives as P
35import qualified Reporting.Annotation as A
39-- EXPRESSIONS
42type Expr = A.Located Expr_
45data Expr_
46 = Chr ES.String
47 | Str ES.String
48 | Int Int
49 | Float EF.Float
50 | Var VarType Name
51 | VarQual VarType Name Name
52 | List [Expr]
53 | Op Name
54 | Negate Expr
55 | Binops [(Expr, A.Located Name)] Expr
56 | Lambda [Pattern] Expr
57 | Call Expr [Expr]
58 | If [(Expr, Expr)] Expr
59 | Let [A.Located Def] Expr
60 | Case Expr [(Pattern, Expr)]
61 | Accessor Name
62 | Access Expr (A.Located Name)
63 | Update (A.Located Name) [(A.Located Name, Expr)]
64 | Record [(A.Located Name, Expr)]
65 | Unit
66 | Tuple Expr Expr [Expr]
67 | Shader Shader.Source Shader.Types
70data VarType = LowVar | CapVar
74-- DEFINITIONS
77data Def
78 = Define (A.Located Name) [Pattern] Expr (Maybe Type)
79 | Destruct Pattern Expr
83-- PATTERN
86type Pattern = A.Located Pattern_
89data Pattern_
90 = PAnything
91 | PVar Name
92 | PRecord [A.Located Name]
93 | PAlias Pattern (A.Located Name)
94 | PUnit
95 | PTuple Pattern Pattern [Pattern]
96 | PCtor A.Region Name [Pattern]
97 | PCtorQual A.Region Name Name [Pattern]
98 | PList [Pattern]
99 | PCons Pattern Pattern
100 | PChr ES.String
101 | PStr ES.String
102 | PInt Int
106-- TYPE
109type Type =
110 A.Located Type_
113data Type_
114 = TLambda Type Type
115 | TVar Name
116 | TType A.Region Name [Type]
117 | TTypeQual A.Region Name Name [Type]
118 | TRecord [(A.Located Name, Type)] (Maybe (A.Located Name))
119 | TUnit
120 | TTuple Type Type [Type]
124-- MODULE
127data Module =
128 Module
129 { _name :: Maybe (A.Located Name)
130 , _exports :: A.Located Exposing
131 , _docs :: Docs
132 , _imports :: [Import]
133 , _values :: [A.Located Value]
134 , _unions :: [A.Located Union]
135 , _aliases :: [A.Located Alias]
136 , _binops :: [A.Located Infix]
137 , _effects :: Effects
138 }
141getName :: Module -> Name
142getName (Module maybeName _ _ _ _ _ _ _ _) =
143 case maybeName of
144 Just (A.At _ name) ->
145 name
147 Nothing ->
148 Name._Main
151getImportName :: Import -> Name
152getImportName (Import (A.At _ name) _ _) =
153 name
156data Import =
157 Import
158 { _import :: A.Located Name
159 , _alias :: Maybe Name
160 , _exposing :: Exposing
161 }
164data Value = Value (A.Located Name) [Pattern] Expr (Maybe Type)
165data Union = Union (A.Located Name) [A.Located Name] [(A.Located Name, [Type])]
166data Alias = Alias (A.Located Name) [A.Located Name] Type
167data Infix = Infix Name Binop.Associativity Binop.Precedence Name
168data Port = Port (A.Located Name) Type
171data Effects
172 = NoEffects
173 | Ports [Port]
174 | Manager A.Region Manager
177data Manager
178 = Cmd (A.Located Name)
179 | Sub (A.Located Name)
180 | Fx (A.Located Name) (A.Located Name)
183data Docs
184 = NoDocs A.Region
185 | YesDocs Comment [(Name, Comment)]
188newtype Comment =
189 Comment P.Snippet
193-- EXPOSING
196data Exposing
197 = Open
198 | Explicit [A.Located Exposed]
201data Exposed
202 = Lower Name
203 | Upper Name Privacy
204 | Operator Name
207data Privacy
208 = Public
209 | Private