module Z3.Opts
( Opts
, setOpts
, stdOpts
, (+?)
, opt
, OptValue
)
where
import qualified Z3.Base as Base
import Data.Monoid ( Monoid(..) )
newtype Opts = Opts [Opt]
instance Monoid Opts where
mempty = Opts []
mappend (Opts ps1) (Opts ps2) = Opts (ps1++ps2)
stdOpts :: Opts
stdOpts = mempty
(+?) :: Opts -> Opts -> Opts
(+?) = mappend
opt :: OptValue val => String -> val -> Opts
opt oid val = Opts [option oid val]
setOpts :: Base.Config -> Opts -> IO ()
setOpts baseCfg (Opts params) = mapM_ (setOpt baseCfg) params
data Opt = Opt String
String
setOpt :: Base.Config -> Opt -> IO ()
setOpt baseCfg (Opt oid val) = Base.setParamValue baseCfg oid val
class OptValue val where
option :: String -> val -> Opt
instance OptValue Bool where
option oid True = Opt oid "true"
option oid False = Opt oid "false"
instance OptValue Int where
option oid = Opt oid . show
instance OptValue Integer where
option oid = Opt oid . show
instance OptValue Double where
option oid = Opt oid . show
instance OptValue [Char] where
option = Opt