Skip to content

Commit b446bbd

Browse files
committed
Optimise preimage using mapMaybe
Avoids throwing empty sets into the union.
1 parent 5fe739d commit b446bbd

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

src/DFAMin.hs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@ import AbsSyn
99
import Data.IntMap ( IntMap )
1010
import Data.IntSet ( IntSet )
1111
import Data.Map ( Map )
12+
#if !MIN_VERSION_containers(0,6,0)
1213
import Data.Maybe ( mapMaybe )
14+
#endif
1315

1416
import qualified Data.Map as Map
1517
import qualified Data.IntSet as IntSet
@@ -168,10 +170,10 @@ groupEquivStates DFA { dfa_states = statemap }
168170
preimage :: IntMap EquivalenceClass -- inversed transition function
169171
-> EquivalenceClass -- subset of codomain of original transition function
170172
-> EquivalenceClass -- preimage of given subset
171-
#if MIN_VERSION_containers(0, 6, 0)
172-
preimage invMap a = IntSet.unions (IntMap.restrictKeys invMap a)
173+
#if MIN_VERSION_containers(0,6,0)
174+
preimage invMap = IntSet.unions . IntMap.restrictKeys invMap
173175
#else
174-
preimage invMap a = IntSet.unions [IntMap.findWithDefault IntSet.empty s invMap | s <- IntSet.toList a]
176+
preimage invMap = IntSet.unions . mapMaybe (`IntMap.lookup` invMap) . IntSet.toList
175177
#endif
176178

177179
xs :: [EquivalenceClass]

0 commit comments

Comments
 (0)