compactable 0.1.0.0 → 0.1.0.1
raw patch · 2 files changed
+18/−5 lines, 2 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Control.Compactable: class Compactable (f :: * -> *) where compact = (>>= maybe empty return) fmapMaybe f = compact . fmap f applyMaybe fa = compact . (fa <*>) bindMaybe x = compact . (x >>=) traverseMaybe f = fmap compact . traverse f
+ Control.Compactable: class Compactable (f :: * -> *) where compact = (>>= maybe empty return) fmapMaybe f = compact . fmap f applyMaybe fa = compact . (fa <*>) bindMaybe x = compact . (x >>=) traverseMaybe f = fmap compact . traverse f filter f = fmapMaybe $ \ a -> if f a then Just a else Nothing
Files
- compactable.cabal +1/−1
- src/Control/Compactable.hs +17/−4
compactable.cabal view
@@ -1,5 +1,5 @@ name: compactable-version: 0.1.0.0+version: 0.1.0.1 synopsis: A generalization for containers that can be stripped of Nothings. description: Sometimes you have a collection of Maybes, and you want to extract the values. Actually that happens a whole lot.
src/Control/Compactable.hs view
@@ -134,6 +134,10 @@ traverseMaybe f = fmap compact . traverse f {-# INLINABLE traverseMaybe #-} + filter :: Functor f => (a -> Bool) -> f a -> f a+ filter f = fmapMaybe $ \a -> if f a then Just a else Nothing+ {-# INLINABLE filter #-}+ instance Compactable Maybe where compact = join {-# INLINABLE compact #-}@@ -148,6 +152,7 @@ fmapMaybe f (h:t) = maybe (fmapMaybe f t) (: fmapMaybe f t) (f h) {-# INLINABLE fmapMaybe #-}+ filter = Prelude.filter instance Compactable IO @@ -183,22 +188,34 @@ {-# INLINABLE compact #-} fmapMaybe = IntMap.mapMaybe {-# INLINABLE fmapMaybe #-}+ filter = IntMap.filter+ {-# INLINABLE filter #-} instance Compactable (Map.Map k) where compact = Map.mapMaybe id {-# INLINABLE compact #-} fmapMaybe = Map.mapMaybe {-# INLINABLE fmapMaybe #-}+ filter = Map.filter+ {-# INLINABLE filter #-} instance Compactable Seq.Seq where compact = fmap fromJust . Seq.filter isJust {-# INLINABLE compact #-}+ filter = Seq.filter+ {-# INLINABLE filter #-} instance Compactable Vector instance Compactable (Const r) where compact (Const r) = Const r {-# INLINABLE compact #-}+ fmapMaybe _ (Const r) = Const r+ {-# INLINABLE fmapMaybe #-}+ bindMaybe (Const r) _ = Const r+ {-# INLINABLE bindMaybe #-}+ filter _ (Const r) = Const r+ {-# INLINABLE filter #-} instance Monoid m => Compactable (Either m) where compact (Right (Just x)) = Right x@@ -209,10 +226,6 @@ fforMaybe :: (Compactable f, Functor f) => f a -> (a -> Maybe b) -> f b fforMaybe = flip fmapMaybe---filter :: (Compactable f, Functor f) => (a -> Bool) -> f a -> f a-filter f = fmapMaybe $ \a -> if f a then Just a else Nothing fmapMaybeM :: (Compactable f, Monad f) => (a -> MaybeT f b) -> f a -> f b