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)
singleton :: Opt -> Opts
singleton o = Opts [o]
stdOpts :: Opts
stdOpts = mempty
(+?) :: Opts -> Opts -> Opts
(+?) = mappend
opt :: OptValue val => String -> val -> Opts
opt oid val = singleton $ 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 = Opt oid . boolVal
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
boolVal :: Bool -> String
boolVal True = "true"
boolVal False = "false"