module UniqueLogic.ST.Example.Expression
{-# DEPRECATED "This module is intended for documentation purposes. Do not import it!" #-}
 where

import qualified UniqueLogic.ST.Expression as Expr
import qualified UniqueLogic.ST.System as Sys
import UniqueLogic.ST.Expression ((=:=))

import Control.Monad.ST (runST, )
import Control.Monad (liftM2, )


example :: (Maybe Double, Maybe Double)
example =
   runST (do
      xv <- Sys.globalVariable
      yv <- Sys.globalVariable
      Sys.solve $ do
         let x = Expr.fromVariable xv
             y = Expr.fromVariable yv
         x*3 =:= y/2
         5 =:= 2+x
      liftM2
         (,)
         (Sys.query xv)
         (Sys.query yv))