on cb359fa help sign in
elk/compiler/src/AST/Source.hs
177 lines 3.0 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 , Import(..)
9 , Value(..)
10 , Union(..)
11 , Alias(..)
12 , Binop(..)
13 , Port(..)
14 , Effects(..)
15 , Manager(..)
16 , Exposing(..)
17 , Exposed(..)
18 , Privacy(..)
19 )
20 where
23import Data.Name (Name)
24import qualified Data.Utf8 as Utf8
26import qualified AST.Utils.Binop as Binop
27import qualified AST.Utils.Shader as Shader
28import qualified Reporting.Annotation as A
32-- EXPRESSIONS
35type Expr = A.Located Expr_
38data Expr_
39 = Chr Utf8.String
40 | Str Utf8.String
41 | Int Int
42 | Float (Utf8.Under256 Float)
43 | Var VarType Name
44 | VarQual VarType Name Name
45 | List [Expr]
46 | Op Name
47 | Negate Expr
48 | Binops [(Expr, A.Located Name)] Expr
49 | Lambda [Pattern] Expr
50 | Call Expr [Expr]
51 | If [(Expr, Expr)] Expr
52 | Let [A.Located Def] Expr
53 | Case Expr [(Pattern, Expr)]
54 | Accessor Name
55 | Access Expr (A.Located Name)
56 | Update (A.Located Name) [(A.Located Name, Expr)]
57 | Record [(A.Located Name, Expr)]
58 | Unit
59 | Tuple Expr Expr [Expr]
60 | Shader Shader.Source Shader.Types
63data VarType = LowVar | CapVar
67-- DEFINITIONS
70data Def
71 = Define (A.Located Name) [Pattern] Expr (Maybe Type)
72 | Destruct Pattern Expr
76-- PATTERN
79type Pattern = A.Located Pattern_
82data Pattern_
83 = PAnything
84 | PVar Name
85 | PRecord [A.Located Name]
86 | PAlias Pattern (A.Located Name)
87 | PUnit
88 | PTuple Pattern Pattern [Pattern]
89 | PCtor A.Region Name [Pattern]
90 | PCtorQual A.Region Name Name [Pattern]
91 | PList [Pattern]
92 | PCons Pattern Pattern
93 | PChr Utf8.String
94 | PStr Utf8.String
95 | PInt Int
99-- TYPE
102type Type =
103 A.Located Type_
106data Type_
107 = TLambda Type Type
108 | TVar Name
109 | TType A.Region Name [Type]
110 | TTypeQual A.Region Name Name [Type]
111 | TRecord [(A.Located Name, Type)] (Maybe (A.Located Name))
112 | TUnit
113 | TTuple Type Type [Type]
117-- MODULE
120data Module =
121 Module
122 { _name :: Name
123 , _exports :: A.Located Exposing
124 , _imports :: [Import]
125 , _values :: [A.Located Value]
126 , _unions :: [A.Located Union]
127 , _aliases :: [A.Located Alias]
128 , _binops :: [A.Located Binop]
129 , _effects :: Effects
130 }
133data Import =
134 Import
135 { _import :: A.Located Name
136 , _alias :: Maybe Name
137 , _exposing :: Exposing
138 }
141data Value = Value (A.Located Name) [Pattern] Expr (Maybe Type)
142data Union = Union (A.Located Name) [A.Located Name] [(A.Located Name, [Type])]
143data Alias = Alias (A.Located Name) [A.Located Name] Type
144data Binop = Binop Name Binop.Associativity Binop.Precedence Name
145data Port = Port (A.Located Name) Type
148data Effects
149 = NoEffects
150 | Ports [Port]
151 | Manager A.Region Manager
154data Manager
155 = Cmd (A.Located Name)
156 | Sub (A.Located Name)
157 | Fx (A.Located Name) (A.Located Name)
161-- EXPOSING
164data Exposing
165 = Open
166 | Explicit [A.Located Exposed]
169data Exposed
170 = Lower Name
171 | Upper Name Privacy
172 | Operator Name
175data Privacy
176 = Public
177 | Private