on dc356df help sign in
elk/src/AST/Valid.hs
125 lines 2.7 kB history raw
1{-# OPTIONS_GHC -Wall #-}
2{-# LANGUAGE OverloadedStrings #-}
3module AST.Valid
4 ( Expr, Expr_(..)
5 , Def(..)
6 , Module(..)
7 , Decl(..)
8 , Union(..)
9 , Alias(..)
10 , Binop(..)
11 , Effects(..)
12 , Port(..)
13 , Manager(..)
14 , defaultModule
15 )
16 where
19import qualified Data.ByteString as B
20import qualified Data.Map as Map
21import Data.Text (Text)
23import qualified AST.Utils.Binop as Binop
24import qualified AST.Source as Src
25import qualified AST.Utils.Shader as Shader
26import qualified Elm.Name as N
27import qualified Reporting.Annotation as A
28import qualified Reporting.Region as R
32-- EXPRESSIONS
35type Expr = A.Located Expr_
38data Expr_
39 = Chr Text
40 | Str Text
41 | Int Int
42 | Float Double
43 | Var Src.VarType N.Name
44 | VarQual Src.VarType N.Name N.Name
45 | List [Expr]
46 | Op N.Name
47 | Negate Expr
48 | Binops [(Expr, A.Located N.Name)] Expr
49 | Lambda [Src.Pattern] Expr
50 | Call Expr [Expr]
51 | If [(Expr, Expr)] Expr
52 | Let [Def] Expr
53 | Case Expr [(Src.Pattern, Expr)]
54 | Accessor N.Name
55 | Access Expr N.Name
56 | Update (A.Located N.Name) [(A.Located N.Name, Expr)]
57 | Record [(A.Located N.Name, Expr)]
58 | Unit
59 | Tuple Expr Expr [Expr]
60 | Shader Text Text Shader.Shader
64-- DEFINITIONS
67data Def
68 = Define R.Region (A.Located N.Name) [Src.Pattern] Expr (Maybe Src.Type)
69 | Destruct R.Region Src.Pattern Expr
73-- MODULE
76data Module =
77 Module
78 { _name :: N.Name
79 , _overview :: Maybe (A.Located B.ByteString)
80 , _docs :: Map.Map N.Name Text
81 , _exports :: Src.Exposing
82 , _imports :: [Src.Import]
83 , _decls :: [A.Located Decl]
84 , _unions :: [Union]
85 , _aliases :: [Alias]
86 , _binop :: [Binop]
87 , _effects :: Effects
88 }
91data Decl = Decl (A.Located N.Name) [Src.Pattern] Expr (Maybe Src.Type)
92data Union = Union (A.Located N.Name) [A.Located N.Name] [(A.Located N.Name, [Src.Type])]
93data Alias = Alias (A.Located N.Name) [A.Located N.Name] Src.Type
94data Binop = Binop N.Name Binop.Associativity Binop.Precedence N.Name
97data Effects
98 = NoEffects
99 | Ports [Port]
100 | Manager R.Region Manager
103data Manager
104 = Cmd (A.Located N.Name)
105 | Sub (A.Located N.Name)
106 | Fx (A.Located N.Name) (A.Located N.Name)
109data Port = Port (A.Located N.Name) Src.Type
112defaultModule :: Map.Map N.Name Text -> [Src.Import] -> [A.Located Decl] -> [Union] -> [Alias] -> [Binop] -> Module
113defaultModule docs imports decls unions aliases binop =
114 Module
115 { _name = "Main"
116 , _overview = Nothing
117 , _docs = docs
118 , _exports = Src.Open
119 , _imports = imports
120 , _decls = decls
121 , _unions = unions
122 , _aliases = aliases
123 , _binop = binop
124 , _effects = NoEffects
125 }