on ea77dcf help sign in
elk/src/AST/Valid.hs
106 lines 2.2 kB history raw
1{-# OPTIONS_GHC -Wall #-}
2module AST.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.Utils.Binop as Binop
22import qualified AST.Source as Src
23import qualified AST.Utils.Shader as Shader
24import qualified Elm.Name as N
25import qualified Reporting.Annotation as A
26import qualified Reporting.Region as R
30-- EXPRESSIONS
33type Expr = A.Located Expr_
36data Expr_
37 = Chr Text
38 | Str Text
39 | Int Int
40 | Float Double
41 | Var (Maybe N.Name) N.Name
42 | List [Expr]
43 | Op N.Name
44 | Negate Expr
45 | Binops [(Expr, A.Located N.Name)] Expr
46 | Lambda [Src.Pattern] Expr
47 | Call Expr [Expr]
48 | If [(Expr, Expr)] Expr
49 | Let [Def] Expr
50 | Case Expr [(Src.Pattern, Expr)]
51 | Accessor N.Name
52 | Access Expr N.Name
53 | Update (A.Located N.Name) [(A.Located N.Name, Expr)]
54 | Record [(A.Located N.Name, Expr)]
55 | Unit
56 | Tuple Expr Expr [Expr]
57 | Shader Text Text Shader.Shader
61-- DEFINITIONS
64data Def
65 = Define R.Region (A.Located N.Name) [Src.Pattern] Expr (Maybe Src.Type)
66 | Destruct R.Region Src.Pattern Expr
70-- MODULE
73data Module =
74 Module
75 { _name :: N.Name
76 , _overview :: A.Located (Maybe B.ByteString)
77 , _docs :: Map.Map N.Name Text
78 , _exports :: Src.Exposing
79 , _imports :: [Src.Import]
80 , _decls :: [A.Located Decl]
81 , _unions :: [Union]
82 , _aliases :: [Alias]
83 , _binop :: [Binop]
84 , _effects :: Effects
85 }
88data Decl = Decl (A.Located N.Name) [Src.Pattern] Expr (Maybe Src.Type)
89data Union = Union (A.Located N.Name) [A.Located N.Name] [(A.Located N.Name, [Src.Type])]
90data Alias = Alias (A.Located N.Name) [A.Located N.Name] Src.Type
91data Binop = Binop (A.Located N.Name) Binop.Associativity Binop.Precedence N.Name
94data Effects
95 = NoEffects
96 | Ports [Port]
97 | Manager R.Region Manager
100data Manager
101 = Cmd (A.Located N.Name)
102 | Sub (A.Located N.Name)
103 | Fx (A.Located N.Name) (A.Located N.Name)
106data Port = Port (A.Located N.Name) Src.Type