on master help sign in
getting rid of InfInt, turned out not to be needed
commitebac3cb4d44f61aaf6df59ad715eb3d1aa490d47 authorOzgur Akgun <ozgurakgun@gmail.com> dateThu 19 Mar 2015, 17:02 (12 years ago) parent517dbd2
1 file changed+8−27
src/Idris/Core/Constraints.hs+8−27
src/Idris/Core/Constraints.hs+8−27
@@ -28,23 +28,9 @@ newtype Var = Var Int
2828data SolverState =
2929 SolverState
3030 { queue :: [(UConstraint, FC)]
31− , domainStore :: M.Map Var (InfInt, InfInt)
31+ , domainStore :: M.Map Var (Int, Int)
3232 }
3333
34−data InfInt = NegInf | I Int | PosInf
35− deriving (Eq, Ord, Show)
36−
37−instance Enum InfInt where
38− succ (I x) = I (succ x)
39− succ x = x
40− pred (I x) = I (pred x)
41− pred x = x
42− toEnum = I
43− fromEnum (I x) = x
44− fromEnum NegInf = minBound
45− fromEnum PosInf = maxBound
46−
47−
4834solve :: [(UConstraint, FC)] -> TC (M.Map Var Int)
4935solve inpConstraints = evalStateT (propagate >> extractSolution) initSolverState
5036
@@ -54,7 +40,7 @@ solve inpConstraints = evalStateT (propagate >> extractSolution) initSolverState
5440 initSolverState = SolverState
5541 { queue = inpConstraints
5642 , domainStore = M.fromList
57− [ (v, (I 0, I 10))
43+ [ (v, (0, 10))
5844 | v <- ordNub [ v
5945 | (c, _) <- inpConstraints
6046 , v <- varsIn c
@@ -93,12 +79,7 @@ solve inpConstraints = evalStateT (propagate >> extractSolution) initSolverState
9379 propagate
9480
9581 extractSolution :: (MonadState SolverState m, Functor m) => m (M.Map Var Int)
96− extractSolution = M.map extractVal <$> gets domainStore
97−
98− extractVal :: (InfInt, InfInt) -> Int
99− extractVal (_, I x) = x
100− extractVal (I x, _) = x
101− extractVal _ = 0
82+ extractSolution = M.map fst <$> gets domainStore
10283
10384 nextConstraint :: MonadState SolverState m => m (Maybe (UConstraint, FC))
10485 nextConstraint = do
@@ -109,11 +90,11 @@ solve inpConstraints = evalStateT (propagate >> extractSolution) initSolverState
10990 modify $ \ st -> st { queue = qs \\ [q] }
11091 return (Just q)
11192
112− domainOf :: MonadState SolverState m => UExp -> m (InfInt, InfInt)
93+ domainOf :: MonadState SolverState m => UExp -> m (Int, Int)
11394 domainOf (UVar var) = gets ((M.! Var var) . domainStore)
114− domainOf (UVal val) = return (I val, I val)
95+ domainOf (UVal val) = return (val, val)
11596
116− -- updateDomainOf :: MonadState SolverState m => UExp -> (InfInt, InfInt) -> m ()
97+ -- updateDomainOf :: MonadState SolverState m => UExp -> (Int, Int) -> m ()
11798 updateDomainOf (UVar var) dom = do
11899 doms <- gets domainStore
119100 let oldDom = doms M.! Var var
@@ -129,10 +110,10 @@ solve inpConstraints = evalStateT (propagate >> extractSolution) initSolverState
129110 let cs = constraints M.! var
130111 modify $ \ st -> st { queue = queue st ++ ordNub cs }
131112
132− domainIntersect :: (InfInt, InfInt) -> (InfInt, InfInt) -> (InfInt, InfInt)
113+ domainIntersect :: (Int, Int) -> (Int, Int) -> (Int, Int)
133114 domainIntersect (a,b) (c,d) = (max a c, min b d)
134115
135− wipeOut :: (InfInt, InfInt) -> Bool
116+ wipeOut :: (Int, Int) -> Bool
136117 wipeOut (l, u) = l > u
137118
138119ordNub :: Ord a => [a] -> [a]