mono-traversable 0.4.0.1 → 0.4.0.2
raw patch · 5 files changed
+53/−2 lines, 5 filesdep +dlistdep +dlist-instances
Dependencies added: dlist, dlist-instances
Files
- mono-traversable.cabal +3/−1
- src/Data/GrowingAppend.hs +3/−0
- src/Data/MinLen.hs +6/−1
- src/Data/MonoTraversable.hs +16/−0
- src/Data/Sequences.hs +25/−0
mono-traversable.cabal view
@@ -1,5 +1,5 @@ name: mono-traversable-version: 0.4.0.1+version: 0.4.0.2 synopsis: Type classes for mapping, folding, and traversing monomorphic containers description: Monomorphic variants of the Functor, Foldable, and Traversable typeclasses. Contains even more experimental code for abstracting containers and sequences. homepage: https://github.com/snoyberg/mono-traversable@@ -33,6 +33,8 @@ , comonad >=3.0.3 , vector-instances , vector-algorithms >= 0.6+ , dlist >= 0.6 && < 1.0+ , dlist-instances == 0.1.* hs-source-dirs: src default-language: Haskell2010
src/Data/GrowingAppend.hs view
@@ -19,6 +19,8 @@ import qualified Data.HashSet as HashSet import qualified Data.IntSet as IntSet import qualified Data.IntMap as IntMap+import qualified Data.DList as DList+import Data.DList.Instances () -- | olength (x <> y) >= olength x + olength y class (Semigroup mono, MonoFoldable mono) => GrowingAppend mono@@ -39,3 +41,4 @@ instance (Eq v, Hashable v) => GrowingAppend (HashSet.HashSet v) instance GrowingAppend IntSet.IntSet instance GrowingAppend (IntMap.IntMap v)+instance GrowingAppend (DList.DList a)
src/Data/MinLen.hs view
@@ -47,6 +47,7 @@ import Data.Monoid (Monoid (..)) import Data.Semigroup (Semigroup (..)) import Data.GrowingAppend+import Control.Monad (liftM) -- Type level naturals data Zero = Zero@@ -77,7 +78,11 @@ deriving instance MonoFunctor mono => MonoFunctor (MinLen nat mono) deriving instance MonoFoldable mono => MonoFoldable (MinLen nat mono) deriving instance MonoFoldableOrd mono => MonoFoldableOrd (MinLen nat mono)-deriving instance MonoTraversable mono => MonoTraversable (MinLen nat mono)+instance MonoTraversable mono => MonoTraversable (MinLen nat mono) where+ otraverse f (MinLen x) = fmap MinLen (otraverse f x)+ {-# INLINE otraverse #-}+ omapM f (MinLen x) = liftM MinLen (omapM f x)+ {-# INLINE omapM #-} deriving instance GrowingAppend mono => GrowingAppend (MinLen nat mono)
src/Data/MonoTraversable.hs view
@@ -85,6 +85,8 @@ import qualified Data.IntSet as IntSet import Data.Semigroup (Semigroup, Option (..)) import qualified Data.ByteString.Unsafe as SU+import Data.DList (DList)+import qualified Data.DList as DL type family Element mono type instance Element S.ByteString = Word8@@ -97,6 +99,7 @@ type instance Element (Maybe a) = a type instance Element (Tree a) = a type instance Element (Seq a) = a+type instance Element (DList a) = a type instance Element (ViewL a) = a type instance Element (ViewR a) = a type instance Element (IntMap a) = a@@ -161,6 +164,7 @@ instance MonoFunctor (Maybe a) instance MonoFunctor (Tree a) instance MonoFunctor (Seq a)+instance MonoFunctor (DList a) instance MonoFunctor (ViewL a) instance MonoFunctor (ViewR a) instance MonoFunctor (IntMap a)@@ -501,6 +505,12 @@ {-# INLINE unsafeHead #-} instance MonoFoldable (Set e) instance MonoFoldable (HashSet e)+instance MonoFoldable (DList a) where+ otoList = DL.toList+ headEx = DL.head+ {-# INLINE otoList #-}+ {-# INLINE headEx #-}+ instance U.Unbox a => MonoFoldable (U.Vector a) where ofoldMap f = ofoldr (mappend . f) mempty ofoldr = U.foldr@@ -799,6 +809,9 @@ instance MonoTraversable (IntMap a) instance MonoTraversable (Option a) instance MonoTraversable (NonEmpty a)+instance MonoTraversable (DList a) where+ otraverse f = fmap DL.fromList . traverse f . DL.toList+ omapM f = liftM DL.fromList . mapM f . DL.toList instance MonoTraversable (Identity a) instance MonoTraversable (Map k v) instance MonoTraversable (HashMap k v)@@ -896,6 +909,9 @@ {-# INLINE opoint #-} instance MonoPointed (Set a) where opoint = Set.singleton+ {-# INLINE opoint #-}+instance MonoPointed (DList a) where+ opoint = DL.singleton {-# INLINE opoint #-} instance Hashable a => MonoPointed (HashSet a) where opoint = HashSet.singleton
src/Data/Sequences.hs view
@@ -21,6 +21,7 @@ import Control.Arrow ((***), first, second) import Control.Monad (liftM) import qualified Data.Sequence as Seq+import qualified Data.DList as DList import qualified Data.Vector as V import qualified Data.Vector.Unboxed as U import qualified Data.Vector.Storable as VS@@ -631,6 +632,30 @@ {-# INLINE initEx #-} {-# INLINE unsafeTail #-} {-# INLINE unsafeInit #-}++instance SemiSequence (DList.DList a) where+ type Index (DList.DList a) = Int+ cons = DList.cons+ snoc = DList.snoc++ reverse = defaultReverse+ sortBy = defaultSortBy+ intersperse = defaultIntersperse+ find = defaultFind+ {-# INLINE intersperse #-}+ {-# INLINE reverse #-}+ {-# INLINE find #-}+ {-# INLINE sortBy #-}+ {-# INLINE cons #-}+ {-# INLINE snoc #-}++instance IsSequence (DList.DList a) where+ fromList = DList.fromList+ replicate = DList.replicate+ tailEx = DList.tail+ {-# INLINE fromList #-}+ {-# INLINE replicate #-}+ {-# INLINE tailEx #-} instance SemiSequence (V.Vector a) where type Index (V.Vector a) = Int