Skip to content

Commit eb291c6

Browse files
committed
Add HasCallStack to find and _class
1 parent d2862ab commit eb291c6

File tree

3 files changed

+9
-3
lines changed

3 files changed

+9
-3
lines changed

src/Data/Equality/Graph.hs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ import Data.Equality.Graph.Lens
6060

6161
import Data.Equality.Utils
6262

63+
import GHC.Stack (HasCallStack)
64+
6365
-- ROMES:TODO: join things built in paralell?
6466
-- instance Ord1 l => Semigroup (EGraph l) where
6567
-- (<>) eg1 eg2 = undefined -- not so easy
@@ -310,7 +312,7 @@ canonicalize (Node enode) eg = Node $ fmap (`find` eg) enode
310312
-- | Find the canonical representation of an e-class id in the e-graph
311313
--
312314
-- Invariant: The e-class id always exists.
313-
find :: ClassId -> EGraph a l -> ClassId
315+
find :: HasCallStack => ClassId -> EGraph a l -> ClassId
314316
find cid = findRepr cid . unionFind
315317
{-# INLINE find #-}
316318

src/Data/Equality/Graph/Lens.hs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ import Data.Equality.Graph.Nodes
2222
import Data.Equality.Graph.Classes
2323
import Data.Equality.Graph.ReprUnionFind
2424

25+
import GHC.Stack (HasCallStack)
26+
2527
-- | A 'Lens'' as defined in other lenses libraries
2628
type Lens' s a = forall f. Functor f => (a -> f a) -> (s -> f s)
2729
type Traversal s t a b = forall f. Applicative f => (a -> f b) -> (s -> f t)
@@ -39,7 +41,7 @@ type Traversal s t a b = forall f. Applicative f => (a -> f b) -> (s -> f t)
3941
-- | Lens for the e-class with the given id in an e-graph
4042
--
4143
-- Calls 'error' when the e-class doesn't exist
42-
_class :: ClassId -> Lens' (EGraph a l) (EClass a l)
44+
_class :: HasCallStack => ClassId -> Lens' (EGraph a l) (EClass a l)
4345
_class i afa s =
4446
let canon_id = findRepr i (unionFind s)
4547
in (\c' -> s { classes = IM.insert canon_id c' (classes s) }) <$> afa (classes s IM.! canon_id)

src/Data/Equality/Graph/ReprUnionFind.hs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import Data.Equality.Graph.Classes.Id
2121

2222
import qualified Data.Equality.Utils.IntToIntMap as IIM
2323
import GHC.Exts ((+#), Int(..), Int#)
24+
import GHC.Stack (HasCallStack)
2425

2526
type RUFSize = Int#
2627

@@ -97,7 +98,8 @@ unionSets a b (RUF im si) = (a, RUF (IIM.insert b a im) si)
9798
-- new_hc = IM.adjust ((b:) . (represented_by_b <>)) a (IM.delete b hc)
9899

99100
-- | Find the canonical representation of an e-class id
100-
findRepr :: ClassId -> ReprUnionFind
101+
findRepr :: HasCallStack
102+
=> ClassId -> ReprUnionFind
101103
-> ClassId -- ^ The found canonical representation
102104
#if __GLASGOW_HASKELL__ >= 902
103105
findRepr v@(I# v#) (RUF m s) =

0 commit comments

Comments
 (0)