this repo has no description
1module Types
2 ( NlsAstValue (..),
3 NlsRunValue (..),
4 NlsThunk,
5 Env (..),
6 Eval,
7 Frame,
8 )
9where
10
11import qualified Data.Map as M
12import qualified Data.Text as T
13
14data NlsAstValue
15 = ASymbol String
16 | ANumber Integer
17 | AString String
18 | AList [NlsAstValue]
19 deriving (Show, Eq, Ord)
20
21type NlsThunk = Eval NlsRunValue
22
23type Frame = M.Map String NlsThunk
24
25data Env = Env
26 { frame :: Frame,
27 parent :: Maybe Env
28 }
29
30type Eval a = Either T.Text a
31
32data NlsRunValue
33 = RNumber Integer
34 | RBool Bool
35 | RString String
36 | RSymbol String
37 | RList [NlsRunValue]
38 | RFunction ([NlsRunValue] -> Env -> Eval (NlsRunValue, Env))
39 | RModule Env
40 | RUnit -- an empty value
41
42instance Show NlsRunValue where
43 show (RNumber n) = show n
44 show (RBool b) = if b then "true" else "false"
45 show (RString s) = show s
46 show (RSymbol s) = s
47 show (RList xs) = "(" ++ unwords (map show xs) ++ ")"
48 show (RFunction _) = "<function>"
49 show (RModule _) = "<module>"
50 show RUnit = "<empty>"