summaryrefslogtreecommitdiff
path: root/app/Builtins.hs
diff options
context:
space:
mode:
authorMirek Kratochvil <exa.exa@gmail.com>2022-11-13 00:46:38 +0100
committerMirek Kratochvil <exa.exa@gmail.com>2022-11-13 00:46:38 +0100
commit8d5353dc8c7ef3eefb0ae4860e67602c455c1a58 (patch)
treec668dc93c1dddd517cfd771da5506c2159e6a2c7 /app/Builtins.hs
parent9d7868431792dcd94ec71adb9f95f55ab4bf027d (diff)
downloadprlg-8d5353dc8c7ef3eefb0ae4860e67602c455c1a58.tar.gz
prlg-8d5353dc8c7ef3eefb0ae4860e67602c455c1a58.tar.bz2
builtins are built in
Diffstat (limited to 'app/Builtins.hs')
-rw-r--r--app/Builtins.hs21
1 files changed, 16 insertions, 5 deletions
diff --git a/app/Builtins.hs b/app/Builtins.hs
index 06c35a3..9e4215c 100644
--- a/app/Builtins.hs
+++ b/app/Builtins.hs
@@ -1,15 +1,19 @@
module Builtins where
import Code
+import Control.Monad.IO.Class
import Control.Monad.Trans.State.Lazy
import qualified Data.Map as M
-import Env
+import Env hiding (PrlgEnv)
+import Interpreter (backtrack)
import qualified Operators as O
-import Debug.Trace
+bi = Builtin
-hello :: BuiltinFunc
-hello = BuiltinFunc $ trace "hllo prlg"
+hello =
+ bi $ do
+ liftIO $ putStrLn "hllo prlg"
+ return Nothing
addBuiltins :: PrlgEnv ()
addBuiltins = do
@@ -21,6 +25,9 @@ addBuiltins = do
any1 <- findStruct "any" 1
eq2 <- findStruct "=" 2
hello0 <- findStruct "hello" 0
+ fail0 <- findStruct "fail" 0
+ true0 <- findStruct "true" 0
+ prlgstate0 <- findStruct "prlgstate" 0
modify $ \s ->
s
{ defs =
@@ -32,7 +39,11 @@ addBuiltins = do
, [Goal, U (Struct a1), U (Atom b), LastCall]
])
, (any1, [[U (VoidRef Nothing), NoGoal]])
- , (hello0, [[Builtin hello]])
+ , (hello0, [[Invoke hello]])
+ , (fail0, [[Invoke $ bi backtrack]])
+ , (true0, [[Invoke $ bi (pure Nothing)]])
+ , ( prlgstate0
+ , [[Invoke $ bi (get >>= liftIO . print >> pure Nothing)]])
]
, ops = [(O.xfy "," 1000), (O.xfx "=" 700)]
}