module UniqueLogic.ST.TF.System.Simple ( -- * Preparation Variable, globalVariable, -- * Posing statements T, localVariable, constant, Sys.assignment2, Sys.assignment3, Sys.Apply, Sys.arg, Sys.runApply, -- * Solution solve, query, ) where import qualified UniqueLogic.ST.TF.System as Sys import Control.Monad.Trans.Identity (IdentityT, runIdentityT, ) import Control.Monad.ST (ST, ) type T = Sys.T IdentityT type Variable s a = Sys.Variable IdentityT s a globalVariable :: ST s (Variable s a) globalVariable = Sys.globalVariable Sys.simpleUpdate localVariable :: T s (Variable s a) localVariable = Sys.localVariable constant :: a -> T s (Variable s a) constant = Sys.constant solve :: T s a -> ST s a solve = runIdentityT . Sys.solve query :: Variable s a -> ST s (Maybe a) query = Sys.query