on c19392f help sign in
elk/src/AST/Expression/Valid.hs
100 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 )
13 where
16import qualified Data.ByteString as B
17import qualified Data.Map as Map
18import Data.Text (Text)
20import qualified AST.Binop as Binop
21import qualified AST.Expression.Source as Src
22import qualified AST.Literal as Literal
23import qualified AST.Pattern as Pattern
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 Pattern.Raw Expr
45 | Call Expr [Expr]
46 | If [(Expr, Expr)] Expr
47 | Let [Def] Expr
48 | Case Expr [(Pattern.Raw, 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 N.Name [Pattern.Raw] Expr (Maybe Type.Raw)
64 | Destruct R.Region Pattern.Raw 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 :: [Decl]
79 , _unions :: [Union]
80 , _aliases :: [Alias]
81 , _binop :: [Binop]
82 , _effects :: Effects
83 }
86data Decl = Decl (A.Located N.Name) [Pattern.Raw] 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 | Cmd (A.Located Text)
96 | Sub (A.Located Text)
97 | Fx (A.Located Text) (A.Located Text)
100data Port = Port (A.Located N.Name) Type.Raw