Skip to content

Commit 7910561

Browse files
simplify
1 parent d39bc58 commit 7910561

File tree

1 file changed

+14
-30
lines changed

1 file changed

+14
-30
lines changed

src/Constrained/Generation.hs

Lines changed: 14 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -836,17 +836,7 @@ mergeSolverStage (SolverStage x ps spec relevant) plan =
836836
normalizeSolverStage $ SolverStage
837837
y
838838
(ps ++ ps')
839-
( addToErrorSpec
840-
( NE.fromList
841-
( [ "Solving var " ++ show x ++ " fails."
842-
, "Merging the Specs"
843-
, " 1. " ++ show spec
844-
, " 2. " ++ show spec'
845-
]
846-
)
847-
)
848-
(spec <> spec')
849-
)
839+
(spec <> spec')
850840
(relevant <> relevant')
851841
Nothing -> stage
852842
| stage@(SolverStage y ps' spec' relevant') <- plan
@@ -900,27 +890,21 @@ backPropagation relevant (SolverPlan initplan) = SolverPlan (go [] (reverse init
900890
go acc [] = acc
901891
go acc (s@(SolverStage (x :: Var a) ps spec _) : plan) = go (s : acc) plan'
902892
where
903-
newStages = concatMap (newStage spec) ps
893+
newStages = concatMap newStage ps
904894
plan' = foldr mergeSolverStage plan newStages
895+
905896
-- Note use of the Term Pattern Equal
906-
newStage specl (Assert (Equal (V x') t)) =
907-
termVarEqCases specl x' t
908-
newStage specr (Assert (Equal t (V x'))) =
909-
termVarEqCases specr x' t
910-
newStage _ _ = []
911-
912-
termVarEqCases :: HasSpec b => Specification a -> Var b -> Term b -> [SolverStage]
913-
termVarEqCases specx x' t
914-
| Set.singleton (Name x) == freeVarSet t
915-
, Result ctx <- toCtx x t =
916-
[SolverStage x' [] (forwardPropagateSpec specx ctx) (Set.insert (Name x) relevant)]
917-
termVarEqCases specx x' t
918-
| Just Refl <- eqVar x x'
919-
, [Name y] <- Set.toList $ freeVarSet t
920-
, Result ctx <- toCtx y t =
921-
[SolverStage y [] (propagateSpec specx ctx)
922-
(Set.insert (Name x') relevant)]
923-
termVarEqCases _ _ _ = []
897+
newStage (Assert (Equal tl tr))
898+
| [Name xl] <- Set.toList $ freeVarSet tl
899+
, [Name xr] <- Set.toList $ freeVarSet tr
900+
, Name x `elem` [Name xl, Name xr]
901+
, Result ctxL <- toCtx xl tl
902+
, Result ctxR <- toCtx xr tr
903+
= case (eqVar x xl, eqVar x xr) of
904+
(Just Refl, _) -> [SolverStage xr [] (propagateSpec (forwardPropagateSpec spec ctxL) ctxR) (Set.insert (Name x) relevant)]
905+
(_, Just Refl) -> [SolverStage xl [] (propagateSpec (forwardPropagateSpec spec ctxR) ctxL) (Set.insert (Name x) relevant)]
906+
_ -> error "The impossible happened"
907+
newStage _ = []
924908

925909
-- | Function symbols for `(==.)`
926910
data EqW :: [Type] -> Type -> Type where

0 commit comments

Comments
 (0)