{-# OPTIONS_HADDOCK show-extensions #-}
{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE MultiParamTypeClasses #-}
module ToySolver.Data.IntVar
( Var
, VarSet
, VarMap
, Variables (..)
, Model
, Eval (..)
) where
import Data.IntMap (IntMap)
import Data.IntSet (IntSet)
import qualified Data.IntSet as IntSet
import Data.Ratio
type Var = Int
type VarSet = IntSet
type VarMap = IntMap
class Variables a where
vars :: a -> VarSet
instance Variables a => Variables [a] where
vars :: [a] -> VarSet
vars = [VarSet] -> VarSet
forall (f :: * -> *). Foldable f => f VarSet -> VarSet
IntSet.unions ([VarSet] -> VarSet) -> ([a] -> [VarSet]) -> [a] -> VarSet
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a -> VarSet) -> [a] -> [VarSet]
forall a b. (a -> b) -> [a] -> [b]
map a -> VarSet
forall a. Variables a => a -> VarSet
vars
type Model r = VarMap r
class Eval m e v | m e -> v where
eval :: m -> e -> v