this repo has no description
at main 50 lines 1.0 kB view raw
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>"