diff options
Diffstat (limited to 'src/Builtins.hs')
| -rw-r--r-- | src/Builtins.hs | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/src/Builtins.hs b/src/Builtins.hs index a4676b8..2eedbed 100644 --- a/src/Builtins.hs +++ b/src/Builtins.hs @@ -13,7 +13,9 @@ builtinEnv = M.fromList [ ("/", builtinDivide2), ("head", builtinHead), ("tail", builtinTail), - ("prepend", builtinPrepend) + ("prepend", builtinPrepend), + ("print!", builtinPrint), + ("string-concat", builtinStringConcat2) ] -- maybe make a builtinBinaryFunction? @@ -93,3 +95,21 @@ builtinPrepend = return $ ASTVector $ ast1 : vec return $ ASTFunction $ inner in ASTFunction outer + +builtinPrint :: AST +builtinPrint = + let outer _ ast = + do (ASTString str) <- assertIsASTString ast + liftIO $ putStr $ str + return ASTUnit + in ASTFunction outer + +builtinStringConcat2 :: AST +builtinStringConcat2 = + let outer _ ast1 = do + (ASTString str1) <- assertIsASTString ast1 + let inner _ ast2 = do + (ASTString str2) <- assertIsASTString ast2 + return $ ASTString $ str1 ++ str2 + return $ ASTFunction $ inner + in ASTFunction outer |
