on 2deedfb 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.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 (Maybe 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 :: Maybe (A.Located B.ByteString)
79 , _docs :: Map.Map N.Name Text
80 , _exports :: 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 (A.Located N.Name) [A.Located N.Name] [(A.Located N.Name, [Src.Type])]
92data Alias = Alias (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 = Nothing
116 , _docs = docs
117 , _exports = Src.Open
118 , _imports = imports
119 , _decls = decls
120 , _unions = unions
121 , _aliases = aliases
122 , _binop = binop
123 , _effects = NoEffects
124 }