module Builtins where import Code import Control.Monad.IO.Class import Control.Monad.Trans.State.Lazy import qualified Data.Map as M import Env hiding (PrlgEnv) import Interpreter (backtrack) import qualified Operators as O bi = Builtin hello = bi $ do liftIO $ putStrLn "hllo prlg" return Nothing addBuiltins :: PrlgEnv () addBuiltins = do a1 <- findStruct "a" 1 a <- findAtom "a" b <- findAtom "b" c <- findAtom "c" b0 <- findStruct "b" 0 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 = M.fromList [ (eq2, [[U (LocalRef 0 Nothing), U (LocalRef 0 Nothing), NoGoal]]) , (a1, [[U (Atom a), NoGoal], [U (Atom b), NoGoal]]) , ( b0 , [ [Goal, U (Struct a1), U (Atom c), LastCall] , [Goal, U (Struct a1), U (Atom b), LastCall] ]) , (any1, [[U (VoidRef Nothing), NoGoal]]) , (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)] }