this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

feat: implement `quote` function

+12 -1
+4
src/Eval.hs
··· 29 29 Just v -> pure v 30 30 Nothing -> Left (T.pack ("undefined symbol: " ++ x)) 31 31 eval _ (AList []) = pure (RList []) 32 + eval _ (AList (ASymbol "quote" : xs)) = 33 + case xs of 34 + [expr] -> pure $ aToRValue expr 35 + _ -> Left "quote expects one argument" 32 36 eval env (AList (f : args)) = do 33 37 func <- eval env f 34 38 argVals <- mapM (eval env) args
+1 -1
src/Parser.hs
··· 42 42 parseQuote = do 43 43 _ <- char '\'' 44 44 v <- parseValue 45 - pure $ AList [ASymbol "'", v] 45 + pure $ AList [ASymbol "quote", v] 46 46 47 47 parseNumber :: NlsParser NlsAstValue 48 48 parseNumber = ANumber <$> lexeme L.decimal
+7
src/Types.hs
··· 3 3 NlsRunValue (..), 4 4 Env, 5 5 Eval, 6 + aToRValue, 6 7 ) 7 8 where 8 9 ··· 33 34 show (RSymbol s) = s 34 35 show (RList xs) = "(" ++ unwords (map show xs) ++ ")" 35 36 show (RFunction _) = show ("<function>" :: String) 37 + 38 + aToRValue :: NlsAstValue -> NlsRunValue 39 + aToRValue (ANumber n) = RNumber n 40 + aToRValue (AString s) = RString s 41 + aToRValue (ASymbol s) = RSymbol s 42 + aToRValue (AList xs) = RList (map aToRValue xs)