[ MIRROR ] An interpreter for a Lisp-like language git.ngill.net/nls.git
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051module Types ( NlsAstValue (..), NlsRunValue (..), NlsThunk, Env (..), Eval, Frame, )where
import qualified Data.Map as Mimport qualified Data.Text as T
data NlsAstValue = ASymbol String | ANumber Integer | AString String | AList [NlsAstValue] deriving (Show, Eq, Ord)
type NlsThunk = Eval NlsRunValue
type Frame = M.Map String NlsThunk
data Env = Env { frame :: Frame, parent :: Maybe Env }
type Eval a = Either T.Text a
data NlsRunValue = RNumber Integer | RBool Bool | RString String | RSymbol String | RList [NlsRunValue] | RFunction ([NlsRunValue] -> Env -> Eval (NlsRunValue, Env)) | RModule Env | RUnit -- an empty value
instance Show NlsRunValue where show (RNumber n) = show n show (RBool b) = if b then "true" else "false" show (RString s) = show s show (RSymbol s) = s show (RList xs) = "(" ++ unwords (map show xs) ++ ")" show (RFunction _) = "<function>" show (RModule _) = "<module>" show RUnit = "<empty>"