on a8bfb99 help sign in
elk/src/AST/Expression/Valid.hs
104 lines 2.2 kB history raw
1{-# OPTIONS_GHC -Wall #-}
2module AST.Expression.Valid
3 ( Expr, Expr_(..)
4 , Def(..)
5 , Module(..)
6 , Decl(..)
7 , Union(..)
8 , Alias(..)
9 , Binop(..)
10 , Effects(..)
11 , Port(..)
12 , Manager(..)
13 )
14 where
17import qualified Data.ByteString as B
18import qualified Data.Map as Map
19import Data.Text (Text)
21import qualified AST.Binop as Binop
22import qualified AST.Expression.Source as Src
23import qualified AST.Literal as Literal
24import qualified AST.Type as Type
25import qualified Elm.Name as N
26import qualified Reporting.Annotation as A
27import qualified Reporting.Region as R
31-- EXPRESSIONS
34type Expr = A.Located Expr_
37data Expr_
38 = Literal Literal.Literal
39 | Var (Maybe N.Name) N.Name
40 | List [Expr]
41 | Op N.Name
42 | Negate Expr
43 | Binops [(Expr, A.Located N.Name)] Expr
44 | Lambda [Src.Pattern] Expr
45 | Call Expr [Expr]
46 | If [(Expr, Expr)] Expr
47 | Let [Def] Expr
48 | Case Expr [(Src.Pattern, Expr)]
49 | Accessor N.Name
50 | Access Expr N.Name
51 | Update (A.Located N.Name) [(A.Located N.Name, Expr)]
52 | Record [(A.Located N.Name, Expr)]
53 | Unit
54 | Tuple Expr Expr [Expr]
55 | GLShader Text Text Literal.Shader
59-- DEFINITIONS
62data Def
63 = Define R.Region (A.Located N.Name) [Src.Pattern] Expr (Maybe Type.Raw)
64 | Destruct R.Region Src.Pattern Expr
68-- MODULE
71data Module =
72 Module
73 { _name :: N.Name
74 , _overview :: A.Located (Maybe B.ByteString)
75 , _docs :: Map.Map N.Name Text
76 , _exports :: Src.Exposing
77 , _imports :: [Src.Import]
78 , _decls :: [A.Located Decl]
79 , _unions :: [Union]
80 , _aliases :: [Alias]
81 , _binop :: [Binop]
82 , _effects :: Effects
83 }
86data Decl = Decl (A.Located N.Name) [Src.Pattern] Expr (Maybe Type.Raw)
87data Union = Union (A.Located N.Name) [A.Located N.Name] [(A.Located N.Name, [Type.Raw])]
88data Alias = Alias (A.Located N.Name) [A.Located N.Name] Type.Raw
89data Binop = Binop (A.Located N.Name) Binop.Associativity Binop.Precedence N.Name
92data Effects
93 = NoEffects
94 | Ports [Port]
95 | Manager R.Region Manager
98data Manager
99 = Cmd (A.Located N.Name)
100 | Sub (A.Located N.Name)
101 | Fx (A.Located N.Name) (A.Located N.Name)
104data Port = Port (A.Located N.Name) Type.Raw