Extract UnifyT into its own package and get an example going

This commit is contained in:
2023-03-03 23:19:52 -08:00
parent 7fc58ce0af
commit 755d514342
4 changed files with 43 additions and 107 deletions

View File

@@ -1,6 +1,23 @@
module Test.Main where
import Prelude
import Language.Bergamot.Syntax
import Control.Monad.Logic.Trans
import Control.Monad.Logic.Class
import Control.Monad.Unify.Trans
import Control.Monad.Unify.Class
import Data.List
import Data.Maybe
main :: Unit
main = unit
runSomeComputation :: forall m. MonadLogic m => MonadUnify IntVar Expr m => m (Expr IntVar)
runSomeComputation = do
x1 <- fresh
x2 <- fresh
let binPred = Atom "hello" $ fromFoldable [variable x1, variable x2]
let realBinPred = Atom "hello" $ fromFoldable [Atom "first" $ fromFoldable [], Atom "second" $ fromFoldable []]
unify binPred realBinPred
(unify (variable x1) (variable x2) >>= const (reify (variable x1))) `interleave` (unify (variable x1) (variable x1) >>= const (reify (variable x2)))
main :: Maybe (Expr IntVar)
main = runUnifier runSomeComputation