on 253bb13 help sign in
elk/compiler/src/AST/Source.hs
198 lines 3.4 kB history raw
1{-# OPTIONS_GHC -Wall #-}
2{-# LANGUAGE OverloadedStrings #-}
3module AST.Source
4 ( Expr, Expr_(..), VarType(..)
5 , Def(..)
6 , Pattern, Pattern_(..)
7 , Type, Type_(..)
8 , Module(..)
9 , getName
10 , getImportName
11 , Import(..)
12 , Value(..)
13 , Union(..)
14 , Alias(..)
15 , Binop(..)
16 , Port(..)
17 , Effects(..)
18 , Manager(..)
19 , Exposing(..)
20 , Exposed(..)
21 , Privacy(..)
22 )
23 where
26import Data.Name (Name)
27import qualified Data.Utf8 as Utf8
29import qualified AST.Utils.Binop as Binop
30import qualified AST.Utils.Shader as Shader
31import qualified Reporting.Annotation as A
35-- EXPRESSIONS
38type Expr = A.Located Expr_
41data Expr_
42 = Chr Utf8.String
43 | Str Utf8.String
44 | Int Int
45 | Float (Utf8.Under256 Float)
46 | Var VarType Name
47 | VarQual VarType Name Name
48 | List [Expr]
49 | Op Name
50 | Negate Expr
51 | Binops [(Expr, A.Located Name)] Expr
52 | Lambda [Pattern] Expr
53 | Call Expr [Expr]
54 | If [(Expr, Expr)] Expr
55 | Let [A.Located Def] Expr
56 | Case Expr [(Pattern, Expr)]
57 | Accessor Name
58 | Access Expr (A.Located Name)
59 | Update (A.Located Name) [(A.Located Name, Expr)]
60 | Record [(A.Located Name, Expr)]
61 | Unit
62 | Tuple Expr Expr [Expr]
63 | Shader Shader.Source Shader.Types
66data VarType = LowVar | CapVar
70-- DEFINITIONS
73data Def
74 = Define (A.Located Name) [Pattern] Expr (Maybe Type)
75 | Destruct Pattern Expr
79-- PATTERN
82type Pattern = A.Located Pattern_
85data Pattern_
86 = PAnything
87 | PVar Name
88 | PRecord [A.Located Name]
89 | PAlias Pattern (A.Located Name)
90 | PUnit
91 | PTuple Pattern Pattern [Pattern]
92 | PCtor A.Region Name [Pattern]
93 | PCtorQual A.Region Name Name [Pattern]
94 | PList [Pattern]
95 | PCons Pattern Pattern
96 | PChr Utf8.String
97 | PStr Utf8.String
98 | PInt Int
102-- TYPE
105type Type =
106 A.Located Type_
109data Type_
110 = TLambda Type Type
111 | TVar Name
112 | TType A.Region Name [Type]
113 | TTypeQual A.Region Name Name [Type]
114 | TRecord [(A.Located Name, Type)] (Maybe (A.Located Name))
115 | TUnit
116 | TTuple Type Type [Type]
120-- MODULE
123data Module =
124 Module
125 { _name :: Maybe Name
126 , _exports :: A.Located Exposing
127 , _imports :: [Import]
128 , _values :: [A.Located Value]
129 , _unions :: [A.Located Union]
130 , _aliases :: [A.Located Alias]
131 , _binops :: [A.Located Binop]
132 , _effects :: Effects
133 }
136getName :: Module -> Name
137getName (Module maybeName _ _ _ _ _ _ _) =
138 case maybeName of
139 Just name -> name
140 Nothing -> defaultModuleName
143{-# NOINLINE defaultModuleName #-}
144defaultModuleName :: Name
145defaultModuleName =
146 "Main"
149getImportName :: Import -> Name
150getImportName (Import (A.At _ name) _ _) =
151 name
154data Import =
155 Import
156 { _import :: A.Located Name
157 , _alias :: Maybe Name
158 , _exposing :: Exposing
159 }
162data Value = Value (A.Located Name) [Pattern] Expr (Maybe Type)
163data Union = Union (A.Located Name) [A.Located Name] [(A.Located Name, [Type])]
164data Alias = Alias (A.Located Name) [A.Located Name] Type
165data Binop = Binop Name Binop.Associativity Binop.Precedence Name
166data Port = Port (A.Located Name) Type
169data Effects
170 = NoEffects
171 | Ports [Port]
172 | Manager A.Region Manager
175data Manager
176 = Cmd (A.Located Name)
177 | Sub (A.Located Name)
178 | Fx (A.Located Name) (A.Located Name)
182-- EXPOSING
185data Exposing
186 = Open
187 | Explicit [A.Located Exposed]
190data Exposed
191 = Lower Name
192 | Upper Name Privacy
193 | Operator Name
196data Privacy
197 = Public
198 | Private