on ca2be8a help sign in
elk/src/AST/Valid.hs
124 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.Map as Map
20import Data.Text (Text)
22import qualified AST.Utils.Binop as Binop
23import qualified AST.Source as Src
24import qualified AST.Utils.Shader as Shader
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 = Chr Text
39 | Str Text
40 | Int Int
41 | Float Double
42 | Var Src.VarType N.Name
43 | VarQual Src.VarType N.Name N.Name
44 | List [Expr]
45 | Op N.Name
46 | Negate Expr
47 | Binops [(Expr, A.Located N.Name)] Expr
48 | Lambda [Src.Pattern] Expr
49 | Call Expr [Expr]
50 | If [(Expr, Expr)] Expr
51 | Let [Def] Expr
52 | Case Expr [(Src.Pattern, Expr)]
53 | Accessor N.Name
54 | Access Expr N.Name
55 | Update (A.Located N.Name) [(A.Located N.Name, Expr)]
56 | Record [(A.Located N.Name, Expr)]
57 | Unit
58 | Tuple Expr Expr [Expr]
59 | Shader Text Text Shader.Shader
63-- DEFINITIONS
66data Def
67 = Define R.Region (A.Located N.Name) [Src.Pattern] Expr (Maybe Src.Type)
68 | Destruct R.Region Src.Pattern Expr
72-- MODULE
75data Module =
76 Module
77 { _name :: N.Name
78 , _overview :: Src.Docs
79 , _docs :: Map.Map N.Name Text
80 , _exports :: A.Located Src.Exposing
81 , _imports :: [Src.Import]
82 , _decls :: [A.Located Decl]
83 , _unions :: [Union]
84 , _aliases :: [Alias]
85 , _binop :: [Binop]
86 , _effects :: Effects
87 }
90data Decl = Decl (A.Located N.Name) [Src.Pattern] Expr (Maybe Src.Type)
91data Union = Union R.Region (A.Located N.Name) [A.Located N.Name] [(A.Located N.Name, [Src.Type])]
92data Alias = Alias R.Region (A.Located N.Name) [A.Located N.Name] Src.Type
93data Binop = Binop N.Name Binop.Associativity Binop.Precedence N.Name
96data Effects
97 = NoEffects
98 | Ports [Port]
99 | Manager R.Region Manager
102data Manager
103 = Cmd (A.Located N.Name)
104 | Sub (A.Located N.Name)
105 | Fx (A.Located N.Name) (A.Located N.Name)
108data Port = Port (A.Located N.Name) Src.Type
111defaultModule :: Map.Map N.Name Text -> [Src.Import] -> [A.Located Decl] -> [Union] -> [Alias] -> [Binop] -> Module
112defaultModule docs imports decls unions aliases binop =
113 Module
114 { _name = "Main"
115 , _overview = Src.NoDocs R.one
116 , _docs = docs
117 , _exports = A.At R.one Src.Open
118 , _imports = imports
119 , _decls = decls
120 , _unions = unions
121 , _aliases = aliases
122 , _binop = binop
123 , _effects = NoEffects
124 }