Added a list replace function to the Utils module
This commit is contained in:
parent
2b05480889
commit
f29d0993e9
|
@ -372,35 +372,9 @@ filterMapByKey f = Map.filterWithKey (\k _ -> f k)
|
||||||
eitherToMaybe :: Either a b -> Maybe b
|
eitherToMaybe :: Either a b -> Maybe b
|
||||||
eitherToMaybe = either (const Nothing) Just
|
eitherToMaybe = either (const Nothing) Just
|
||||||
|
|
||||||
|
-- | Transforms a graph with a transformation function that uses the Node number.
|
||||||
labelMapWithNodeId :: DynGraph gr => (Node -> a -> b) -> gr a c -> gr b c
|
labelMapWithNodeId :: DynGraph gr => (Node -> a -> b) -> gr a c -> gr b c
|
||||||
labelMapWithNodeId f = gmap (\(x,n,l,y) -> (x,n,f n l,y))
|
labelMapWithNodeId f = gmap (\(x,n,l,y) -> (x,n,f n l,y))
|
||||||
|
|
||||||
-- This is quite inefficient, but I can't see an easier way:
|
|
||||||
labelMapWithNodeIdM :: (DynGraph gr, Monad m) => (Node -> a -> m b) -> gr a c -> m (gr b c)
|
|
||||||
labelMapWithNodeIdM f gr
|
|
||||||
= let unsequencedMap = ufold (\(x, n, l, y) -> Map.insert n (f n l)) Map.empty gr
|
|
||||||
in do mp <- T.sequence unsequencedMap
|
|
||||||
return $ gmap (\(x,n,l,y) -> (x,n,fromJust $ Map.lookup n mp,y)) gr
|
|
||||||
|
|
||||||
reverseLookup :: (Ord k, Eq v) => v -> Map.Map k v -> Maybe k
|
reverseLookup :: (Ord k, Eq v) => v -> Map.Map k v -> Maybe k
|
||||||
reverseLookup x m = lookup x $ map revPair $ Map.toList m
|
reverseLookup x m = lookup x $ map revPair $ Map.toList m
|
||||||
|
|
||||||
-- Where you have a wrapper for an inner monadic action, but you want to apply
|
|
||||||
-- this to an action that has state wrapped around it:
|
|
||||||
liftWrapStateT :: Monad m => (forall b. m b -> m b) -> StateT s m a -> StateT s m a
|
|
||||||
liftWrapStateT wrap m
|
|
||||||
= do st <- get
|
|
||||||
(x, st') <- lift $ wrap (runStateT m st)
|
|
||||||
put st'
|
|
||||||
return x
|
|
||||||
|
|
||||||
-- The foldM equivalent of foldl1:
|
|
||||||
foldM1 :: Monad m => (a -> a -> m a) -> [a] -> m a
|
|
||||||
foldM1 f (x:xs) = foldM f x xs
|
|
||||||
foldM1 _ [] = fail "Empty list in foldM1"
|
|
||||||
|
|
||||||
-- | A shortcut for concat and intersperse.
|
|
||||||
-- For example, @joinWith " " names@ is the same as @concat (intersperse " "
|
|
||||||
-- names)@
|
|
||||||
joinWith :: [a] -> [[a]] -> [a]
|
|
||||||
joinWith x = concat . intersperse x
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user