packages feed

non-empty 0.2.1 → 0.3

raw patch · 12 files changed

+252/−89 lines, 12 filesdep +deepseqdep ~containersdep ~utility-htPVP ok

version bump matches the API change (PVP)

Dependencies added: deepseq

Dependency ranges changed: containers, utility-ht

API changes (from Hackage documentation)

- Data.Append: fst :: T f g a -> f a
- Data.Append: instance (Foldable f, Foldable g) => Foldable (T f g)
- Data.Append: instance (Functor f, Functor g) => Functor (T f g)
- Data.Append: instance (Traversable f, Traversable g) => Traversable (T f g)
- Data.Append: snd :: T f g a -> g a
- Data.Empty: instance Arbitrary (T a)
- Data.Empty: instance Empty T
- Data.Empty: instance Eq (T a)
- Data.Empty: instance Foldable T
- Data.Empty: instance Functor T
- Data.Empty: instance Iterate T
- Data.Empty: instance Ord (T a)
- Data.Empty: instance Repeat T
- Data.Empty: instance Reverse T
- Data.Empty: instance Show (T a)
- Data.Empty: instance Show T
- Data.Empty: instance Sort T
- Data.Empty: instance SortBy T
- Data.Empty: instance Traversable T
- Data.Empty: instance View T
- Data.Empty: instance ViewL T
- Data.Empty: instance ViewR T
- Data.Empty: instance Zip T
- Data.NonEmpty: class Functor f => RemoveEach f
- Data.NonEmpty: class Tails f
- Data.NonEmpty: head :: T f a -> a
- Data.NonEmpty: tail :: T f a -> f a
- Data.NonEmpty.Class: instance Append Seq
- Data.NonEmpty.Class: instance Append []
- Data.NonEmpty.Class: instance Arbitrary []
- Data.NonEmpty.Class: instance Cons Seq
- Data.NonEmpty.Class: instance Cons []
- Data.NonEmpty.Class: instance Empty Maybe
- Data.NonEmpty.Class: instance Empty Seq
- Data.NonEmpty.Class: instance Empty Set
- Data.NonEmpty.Class: instance Empty []
- Data.NonEmpty.Class: instance Iterate []
- Data.NonEmpty.Class: instance Repeat []
- Data.NonEmpty.Class: instance Reverse Maybe
- Data.NonEmpty.Class: instance Reverse Seq
- Data.NonEmpty.Class: instance Reverse []
- Data.NonEmpty.Class: instance Show Set
- Data.NonEmpty.Class: instance Show []
- Data.NonEmpty.Class: instance Singleton Maybe
- Data.NonEmpty.Class: instance Singleton Seq
- Data.NonEmpty.Class: instance Singleton Set
- Data.NonEmpty.Class: instance Singleton []
- Data.NonEmpty.Class: instance Snoc Seq
- Data.NonEmpty.Class: instance Snoc []
- Data.NonEmpty.Class: instance Sort Maybe
- Data.NonEmpty.Class: instance Sort Seq
- Data.NonEmpty.Class: instance Sort Set
- Data.NonEmpty.Class: instance Sort []
- Data.NonEmpty.Class: instance SortBy Maybe
- Data.NonEmpty.Class: instance SortBy Seq
- Data.NonEmpty.Class: instance SortBy []
- Data.NonEmpty.Class: instance View Maybe
- Data.NonEmpty.Class: instance View Seq
- Data.NonEmpty.Class: instance View Set
- Data.NonEmpty.Class: instance View []
- Data.NonEmpty.Class: instance ViewL Maybe
- Data.NonEmpty.Class: instance ViewL Seq
- Data.NonEmpty.Class: instance ViewL Set
- Data.NonEmpty.Class: instance ViewL []
- Data.NonEmpty.Class: instance ViewR Maybe
- Data.NonEmpty.Class: instance ViewR Seq
- Data.NonEmpty.Class: instance ViewR Set
- Data.NonEmpty.Class: instance ViewR []
- Data.NonEmpty.Class: instance Zip Maybe
- Data.NonEmpty.Class: instance Zip Seq
- Data.NonEmpty.Class: instance Zip []
- Data.NonEmpty.Map: instance (Eq k, Eq a) => Eq (T k a)
- Data.NonEmpty.Map: instance (Ord k, Ord a) => Ord (T k a)
- Data.NonEmpty.Map: instance (Show k, Show a) => Show (T k a)
- Data.NonEmpty.Map: instance Ord k => Foldable (T k)
- Data.NonEmpty.Map: instance Ord k => Functor (T k)
- Data.NonEmpty.Map: instance Ord k => Traversable (T k)
- Data.NonEmpty.Mixed: instance Choose T
- Data.NonEmpty.Mixed: instance Choose []
- Data.NonEmpty.Mixed: instance Choose f => Choose (T f)
- Data.NonEmpty.Set: instance Eq a => Eq (T a)
- Data.NonEmpty.Set: instance Ord a => Ord (T a)
- Data.NonEmpty.Set: instance Show a => Show (T a)
- Data.Optional: instance (Arbitrary f, Arbitrary a) => Arbitrary (T f a)
- Data.Optional: instance (Cons f, Empty f) => Cons (T f)
- Data.Optional: instance (Eq a, Eq (f a)) => Eq (T f a)
- Data.Optional: instance (Insert f, Sort f) => Sort (T f)
- Data.Optional: instance (InsertBy f, SortBy f) => SortBy (T f)
- Data.Optional: instance (Ord a, Ord (f a)) => Ord (T f a)
- Data.Optional: instance (Show f, Show a) => Show (T f a)
- Data.Optional: instance (Traversable f, Reverse f) => Reverse (T f)
- Data.Optional: instance Empty (T f)
- Data.Optional: instance Foldable f => Foldable (T f)
- Data.Optional: instance Functor f => Functor (T f)
- Data.Optional: instance Insert f => Insert (T f)
- Data.Optional: instance InsertBy f => InsertBy (T f)
- Data.Optional: instance RemoveEach f => RemoveEach (T f)
- Data.Optional: instance Repeat f => Repeat (T f)
- Data.Optional: instance Show f => Show (T f)
- Data.Optional: instance Tails f => Tails (T f)
- Data.Optional: instance Traversable f => Traversable (T f)
- Data.Optional: instance Zip f => Zip (T f)
- Data.Zip: decons :: T f a -> f a
- Data.Zip: instance (Zip f, Repeat f) => Applicative (T f)
- Data.Zip: instance Functor f => Functor (T f)
+ Data.Append: [fst] :: T f g a -> f a
+ Data.Append: [snd] :: T f g a -> g a
+ Data.Append: instance (Data.Foldable.Foldable f, Data.Foldable.Foldable g) => Data.Foldable.Foldable (Data.Append.T f g)
+ Data.Append: instance (Data.NonEmpty.Class.NFData f, Data.NonEmpty.Class.NFData g) => Data.NonEmpty.Class.NFData (Data.Append.T f g)
+ Data.Append: instance (Data.NonEmpty.Class.NFData f, Data.NonEmpty.Class.NFData g, Control.DeepSeq.NFData a) => Control.DeepSeq.NFData (Data.Append.T f g a)
+ Data.Append: instance (Data.Traversable.Traversable f, Data.Traversable.Traversable g) => Data.Traversable.Traversable (Data.Append.T f g)
+ Data.Append: instance (GHC.Base.Functor f, GHC.Base.Functor g) => GHC.Base.Functor (Data.Append.T f g)
+ Data.Empty: instance Control.DeepSeq.NFData (Data.Empty.T a)
+ Data.Empty: instance Data.Foldable.Foldable Data.Empty.T
+ Data.Empty: instance Data.NonEmpty.Class.Empty Data.Empty.T
+ Data.Empty: instance Data.NonEmpty.Class.Iterate Data.Empty.T
+ Data.Empty: instance Data.NonEmpty.Class.NFData Data.Empty.T
+ Data.Empty: instance Data.NonEmpty.Class.Repeat Data.Empty.T
+ Data.Empty: instance Data.NonEmpty.Class.Reverse Data.Empty.T
+ Data.Empty: instance Data.NonEmpty.Class.Show Data.Empty.T
+ Data.Empty: instance Data.NonEmpty.Class.Sort Data.Empty.T
+ Data.Empty: instance Data.NonEmpty.Class.SortBy Data.Empty.T
+ Data.Empty: instance Data.NonEmpty.Class.View Data.Empty.T
+ Data.Empty: instance Data.NonEmpty.Class.ViewL Data.Empty.T
+ Data.Empty: instance Data.NonEmpty.Class.ViewR Data.Empty.T
+ Data.Empty: instance Data.NonEmpty.Class.Zip Data.Empty.T
+ Data.Empty: instance Data.Traversable.Traversable Data.Empty.T
+ Data.Empty: instance GHC.Base.Functor Data.Empty.T
+ Data.Empty: instance GHC.Classes.Eq (Data.Empty.T a)
+ Data.Empty: instance GHC.Classes.Ord (Data.Empty.T a)
+ Data.Empty: instance GHC.Show.Show (Data.Empty.T a)
+ Data.Empty: instance Test.QuickCheck.Arbitrary.Arbitrary (Data.Empty.T a)
+ Data.NonEmpty: [head] :: T f a -> a
+ Data.NonEmpty: [tail] :: T f a -> f a
+ Data.NonEmpty: foldBalancedStrict :: (a -> a -> a) -> T [] a -> a
+ Data.NonEmpty: infixr 5 `appendRight`
+ Data.NonEmpty.Class: class NFData f
+ Data.NonEmpty.Class: instance Control.DeepSeq.NFData k => Data.NonEmpty.Class.NFData (Data.Map.Base.Map k)
+ Data.NonEmpty.Class: instance Data.NonEmpty.Class.Append Data.Sequence.Seq
+ Data.NonEmpty.Class: instance Data.NonEmpty.Class.Append []
+ Data.NonEmpty.Class: instance Data.NonEmpty.Class.Arbitrary []
+ Data.NonEmpty.Class: instance Data.NonEmpty.Class.Cons Data.Sequence.Seq
+ Data.NonEmpty.Class: instance Data.NonEmpty.Class.Cons []
+ Data.NonEmpty.Class: instance Data.NonEmpty.Class.Empty (Data.Map.Base.Map k)
+ Data.NonEmpty.Class: instance Data.NonEmpty.Class.Empty Data.Sequence.Seq
+ Data.NonEmpty.Class: instance Data.NonEmpty.Class.Empty Data.Set.Base.Set
+ Data.NonEmpty.Class: instance Data.NonEmpty.Class.Empty GHC.Base.Maybe
+ Data.NonEmpty.Class: instance Data.NonEmpty.Class.Empty []
+ Data.NonEmpty.Class: instance Data.NonEmpty.Class.Iterate GHC.Base.Maybe
+ Data.NonEmpty.Class: instance Data.NonEmpty.Class.Iterate []
+ Data.NonEmpty.Class: instance Data.NonEmpty.Class.NFData Data.Set.Base.Set
+ Data.NonEmpty.Class: instance Data.NonEmpty.Class.NFData GHC.Base.Maybe
+ Data.NonEmpty.Class: instance Data.NonEmpty.Class.NFData []
+ Data.NonEmpty.Class: instance Data.NonEmpty.Class.Repeat GHC.Base.Maybe
+ Data.NonEmpty.Class: instance Data.NonEmpty.Class.Repeat []
+ Data.NonEmpty.Class: instance Data.NonEmpty.Class.Reverse Data.Sequence.Seq
+ Data.NonEmpty.Class: instance Data.NonEmpty.Class.Reverse GHC.Base.Maybe
+ Data.NonEmpty.Class: instance Data.NonEmpty.Class.Reverse []
+ Data.NonEmpty.Class: instance Data.NonEmpty.Class.Show Data.Set.Base.Set
+ Data.NonEmpty.Class: instance Data.NonEmpty.Class.Show []
+ Data.NonEmpty.Class: instance Data.NonEmpty.Class.Singleton Data.Sequence.Seq
+ Data.NonEmpty.Class: instance Data.NonEmpty.Class.Singleton Data.Set.Base.Set
+ Data.NonEmpty.Class: instance Data.NonEmpty.Class.Singleton GHC.Base.Maybe
+ Data.NonEmpty.Class: instance Data.NonEmpty.Class.Singleton []
+ Data.NonEmpty.Class: instance Data.NonEmpty.Class.Snoc Data.Sequence.Seq
+ Data.NonEmpty.Class: instance Data.NonEmpty.Class.Snoc []
+ Data.NonEmpty.Class: instance Data.NonEmpty.Class.Sort Data.Sequence.Seq
+ Data.NonEmpty.Class: instance Data.NonEmpty.Class.Sort Data.Set.Base.Set
+ Data.NonEmpty.Class: instance Data.NonEmpty.Class.Sort GHC.Base.Maybe
+ Data.NonEmpty.Class: instance Data.NonEmpty.Class.Sort []
+ Data.NonEmpty.Class: instance Data.NonEmpty.Class.SortBy Data.Sequence.Seq
+ Data.NonEmpty.Class: instance Data.NonEmpty.Class.SortBy GHC.Base.Maybe
+ Data.NonEmpty.Class: instance Data.NonEmpty.Class.SortBy []
+ Data.NonEmpty.Class: instance Data.NonEmpty.Class.View Data.Sequence.Seq
+ Data.NonEmpty.Class: instance Data.NonEmpty.Class.View Data.Set.Base.Set
+ Data.NonEmpty.Class: instance Data.NonEmpty.Class.View GHC.Base.Maybe
+ Data.NonEmpty.Class: instance Data.NonEmpty.Class.View []
+ Data.NonEmpty.Class: instance Data.NonEmpty.Class.ViewL Data.Sequence.Seq
+ Data.NonEmpty.Class: instance Data.NonEmpty.Class.ViewL Data.Set.Base.Set
+ Data.NonEmpty.Class: instance Data.NonEmpty.Class.ViewL GHC.Base.Maybe
+ Data.NonEmpty.Class: instance Data.NonEmpty.Class.ViewL []
+ Data.NonEmpty.Class: instance Data.NonEmpty.Class.ViewR Data.Sequence.Seq
+ Data.NonEmpty.Class: instance Data.NonEmpty.Class.ViewR Data.Set.Base.Set
+ Data.NonEmpty.Class: instance Data.NonEmpty.Class.ViewR GHC.Base.Maybe
+ Data.NonEmpty.Class: instance Data.NonEmpty.Class.ViewR []
+ Data.NonEmpty.Class: instance Data.NonEmpty.Class.Zip Data.Sequence.Seq
+ Data.NonEmpty.Class: instance Data.NonEmpty.Class.Zip GHC.Base.Maybe
+ Data.NonEmpty.Class: instance Data.NonEmpty.Class.Zip []
+ Data.NonEmpty.Class: rnf :: (NFData f, NFData a) => f a -> ()
+ Data.NonEmpty.Map: instance (Control.DeepSeq.NFData k, Control.DeepSeq.NFData a) => Control.DeepSeq.NFData (Data.NonEmpty.Map.T k a)
+ Data.NonEmpty.Map: instance (GHC.Classes.Eq k, GHC.Classes.Eq a) => GHC.Classes.Eq (Data.NonEmpty.Map.T k a)
+ Data.NonEmpty.Map: instance (GHC.Classes.Ord k, GHC.Classes.Ord a) => GHC.Classes.Ord (Data.NonEmpty.Map.T k a)
+ Data.NonEmpty.Map: instance (GHC.Show.Show k, GHC.Show.Show a) => GHC.Show.Show (Data.NonEmpty.Map.T k a)
+ Data.NonEmpty.Map: instance Control.DeepSeq.NFData k => Data.NonEmpty.Class.NFData (Data.NonEmpty.Map.T k)
+ Data.NonEmpty.Map: instance GHC.Classes.Ord k => Data.Foldable.Foldable (Data.NonEmpty.Map.T k)
+ Data.NonEmpty.Map: instance GHC.Classes.Ord k => Data.Traversable.Traversable (Data.NonEmpty.Map.T k)
+ Data.NonEmpty.Map: instance GHC.Classes.Ord k => GHC.Base.Functor (Data.NonEmpty.Map.T k)
+ Data.NonEmpty.Map: map :: (Ord k) => (a -> b) -> T k a -> T k b
+ Data.NonEmpty.Map: mapWithKey :: (Ord k) => (k -> a -> b) -> T k a -> T k b
+ Data.NonEmpty.Mixed: groupEithers :: (Foldable f) => f (Either a b) -> [Either (T [] a) (T [] b)]
+ Data.NonEmpty.Mixed: groupKey :: (Foldable f, Eq a) => (b -> a) -> f b -> [(a, T [] b)]
+ Data.NonEmpty.Mixed: groupPairs :: (Foldable f, Eq a) => f (a, b) -> [(a, T [] b)]
+ Data.NonEmpty.Mixed: instance Data.NonEmpty.Mixed.Choose Data.Empty.T
+ Data.NonEmpty.Mixed: instance Data.NonEmpty.Mixed.Choose []
+ Data.NonEmpty.Mixed: instance Data.NonEmpty.Mixed.Choose f => Data.NonEmpty.Mixed.Choose (Data.NonEmptyPrivate.T f)
+ Data.NonEmpty.Set: deleteFindMax :: (Ord a) => T a -> (a, Set a)
+ Data.NonEmpty.Set: deleteFindMin :: T a -> (a, Set a)
+ Data.NonEmpty.Set: deleteMax :: (Ord a) => T a -> Set a
+ Data.NonEmpty.Set: deleteMin :: T a -> Set a
+ Data.NonEmpty.Set: fetch :: (Ord a) => Set a -> Maybe (T a)
+ Data.NonEmpty.Set: findMax :: T a -> a
+ Data.NonEmpty.Set: findMin :: T a -> a
+ Data.NonEmpty.Set: instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Data.NonEmpty.Set.T a)
+ Data.NonEmpty.Set: instance Data.NonEmpty.Class.NFData Data.NonEmpty.Set.T
+ Data.NonEmpty.Set: instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.NonEmpty.Set.T a)
+ Data.NonEmpty.Set: instance GHC.Classes.Ord a => GHC.Classes.Ord (Data.NonEmpty.Set.T a)
+ Data.NonEmpty.Set: instance GHC.Show.Show a => GHC.Show.Show (Data.NonEmpty.Set.T a)
+ Data.Optional: infixr 5 ?:
+ Data.Optional: instance (Data.NonEmpty.Class.Arbitrary f, Test.QuickCheck.Arbitrary.Arbitrary a) => Test.QuickCheck.Arbitrary.Arbitrary (Data.Optional.T f a)
+ Data.Optional: instance (Data.NonEmpty.Class.Cons f, Data.NonEmpty.Class.Empty f) => Data.NonEmpty.Class.Cons (Data.Optional.T f)
+ Data.Optional: instance (Data.NonEmpty.Class.NFData f, Control.DeepSeq.NFData a) => Control.DeepSeq.NFData (Data.Optional.T f a)
+ Data.Optional: instance (Data.NonEmpty.Class.Show f, GHC.Show.Show a) => GHC.Show.Show (Data.Optional.T f a)
+ Data.Optional: instance (Data.NonEmptyPrivate.Insert f, Data.NonEmpty.Class.Sort f) => Data.NonEmpty.Class.Sort (Data.Optional.T f)
+ Data.Optional: instance (Data.NonEmptyPrivate.InsertBy f, Data.NonEmpty.Class.SortBy f) => Data.NonEmpty.Class.SortBy (Data.Optional.T f)
+ Data.Optional: instance (Data.Traversable.Traversable f, Data.NonEmpty.Class.Reverse f) => Data.NonEmpty.Class.Reverse (Data.Optional.T f)
+ Data.Optional: instance (GHC.Classes.Eq a, GHC.Classes.Eq (f a)) => GHC.Classes.Eq (Data.Optional.T f a)
+ Data.Optional: instance (GHC.Classes.Ord a, GHC.Classes.Ord (f a)) => GHC.Classes.Ord (Data.Optional.T f a)
+ Data.Optional: instance Data.Foldable.Foldable f => Data.Foldable.Foldable (Data.Optional.T f)
+ Data.Optional: instance Data.NonEmpty.Class.Empty (Data.Optional.T f)
+ Data.Optional: instance Data.NonEmpty.Class.Iterate f => Data.NonEmpty.Class.Iterate (Data.Optional.T f)
+ Data.Optional: instance Data.NonEmpty.Class.NFData f => Data.NonEmpty.Class.NFData (Data.Optional.T f)
+ Data.Optional: instance Data.NonEmpty.Class.Repeat f => Data.NonEmpty.Class.Repeat (Data.Optional.T f)
+ Data.Optional: instance Data.NonEmpty.Class.Show f => Data.NonEmpty.Class.Show (Data.Optional.T f)
+ Data.Optional: instance Data.NonEmpty.Class.Zip f => Data.NonEmpty.Class.Zip (Data.Optional.T f)
+ Data.Optional: instance Data.NonEmptyPrivate.Insert f => Data.NonEmptyPrivate.Insert (Data.Optional.T f)
+ Data.Optional: instance Data.NonEmptyPrivate.InsertBy f => Data.NonEmptyPrivate.InsertBy (Data.Optional.T f)
+ Data.Optional: instance Data.Traversable.Traversable f => Data.Traversable.Traversable (Data.Optional.T f)
+ Data.Optional: instance GHC.Base.Functor f => GHC.Base.Functor (Data.Optional.T f)
+ Data.Zip: [decons] :: T f a -> f a
+ Data.Zip: instance (Data.NonEmpty.Class.NFData f, Control.DeepSeq.NFData a) => Control.DeepSeq.NFData (Data.Zip.T f a)
+ Data.Zip: instance (Data.NonEmpty.Class.Zip f, Data.NonEmpty.Class.Repeat f) => GHC.Base.Applicative (Data.Zip.T f)
+ Data.Zip: instance Data.NonEmpty.Class.NFData f => Data.NonEmpty.Class.NFData (Data.Zip.T f)
+ Data.Zip: instance GHC.Base.Functor f => GHC.Base.Functor (Data.Zip.T f)
- Data.NonEmpty: appendRight :: Append f => T f a -> f a -> T f a
+ Data.NonEmpty: appendRight :: (Append f) => T f a -> f a -> T f a
- Data.NonEmpty: foldl1 :: Foldable f => (a -> a -> a) -> T f a -> a
+ Data.NonEmpty: foldl1 :: (Foldable f) => (a -> a -> a) -> T f a -> a
- Data.NonEmpty: foldl1Map :: Foldable f => (b -> b -> b) -> (a -> b) -> T f a -> b
+ Data.NonEmpty: foldl1Map :: (Foldable f) => (b -> b -> b) -> (a -> b) -> T f a -> b
- Data.NonEmpty: init :: Traversable f => T f a -> f a
+ Data.NonEmpty: init :: (Traversable f) => T f a -> f a
- Data.NonEmpty: last :: Foldable f => T f a -> a
+ Data.NonEmpty: last :: (Foldable f) => T f a -> a
- Data.NonEmpty: mapAdjacent :: Traversable f => (a -> a -> b) -> T f a -> f b
+ Data.NonEmpty: mapAdjacent :: (Traversable f) => (a -> a -> b) -> T f a -> f b
- Data.NonEmpty: maximumBy :: Foldable f => (a -> a -> Ordering) -> T f a -> a
+ Data.NonEmpty: maximumBy :: (Foldable f) => (a -> a -> Ordering) -> T f a -> a
- Data.NonEmpty: minimumBy :: Foldable f => (a -> a -> Ordering) -> T f a -> a
+ Data.NonEmpty: minimumBy :: (Foldable f) => (a -> a -> Ordering) -> T f a -> a
- Data.NonEmpty: removeEach :: RemoveEach f => T f a -> T f (a, f a)
+ Data.NonEmpty: removeEach :: (Traversable f) => T f a -> T f (a, f a)
- Data.NonEmpty: tails :: (Tails f, Cons g, Empty g) => f a -> T f (g a)
+ Data.NonEmpty: tails :: (Traversable f, Cons g, Empty g) => f a -> T f (g a)
- Data.NonEmpty: viewR :: Traversable f => T f a -> (f a, a)
+ Data.NonEmpty: viewR :: (Traversable f) => T f a -> (f a, a)
- Data.NonEmpty: zipWith :: Zip f => (a -> b -> c) -> T f a -> T f b -> T f c
+ Data.NonEmpty: zipWith :: (Zip f) => (a -> b -> c) -> T f a -> T f b -> T f c
- Data.NonEmpty.Class: zip :: Zip f => f a -> f b -> f (a, b)
+ Data.NonEmpty.Class: zip :: (Zip f) => f a -> f b -> f (a, b)
- Data.NonEmpty.Class: zip3 :: Zip f => f a -> f b -> f c -> f (a, b, c)
+ Data.NonEmpty.Class: zip3 :: (Zip f) => f a -> f b -> f c -> f (a, b, c)
- Data.NonEmpty.Class: zip4 :: Zip f => f a -> f b -> f c -> f d -> f (a, b, c, d)
+ Data.NonEmpty.Class: zip4 :: (Zip f) => f a -> f b -> f c -> f d -> f (a, b, c, d)
- Data.NonEmpty.Class: zipWith3 :: Zip f => (a -> b -> c -> d) -> f a -> f b -> f c -> f d
+ Data.NonEmpty.Class: zipWith3 :: (Zip f) => (a -> b -> c -> d) -> f a -> f b -> f c -> f d
- Data.NonEmpty.Class: zipWith4 :: Zip f => (a -> b -> c -> d -> e) -> f a -> f b -> f c -> f d -> f e
+ Data.NonEmpty.Class: zipWith4 :: (Zip f) => (a -> b -> c -> d -> e) -> f a -> f b -> f c -> f d -> f e
- Data.NonEmpty.Map: fetch :: Ord k => Map k a -> Maybe (T k a)
+ Data.NonEmpty.Map: fetch :: (Ord k) => Map k a -> Maybe (T k a)
- Data.NonEmpty.Map: flatten :: Ord k => T k a -> Map k a
+ Data.NonEmpty.Map: flatten :: (Ord k) => T k a -> Map k a
- Data.NonEmpty.Map: fromList :: Ord k => T [] (k, a) -> T k a
+ Data.NonEmpty.Map: fromList :: (Ord k) => T [] (k, a) -> T k a
- Data.NonEmpty.Map: keysSet :: Ord k => T k a -> T k
+ Data.NonEmpty.Map: keysSet :: (Ord k) => T k a -> T k
- Data.NonEmpty.Map: lookup :: Ord k => k -> T k a -> Maybe a
+ Data.NonEmpty.Map: lookup :: (Ord k) => k -> T k a -> Maybe a
- Data.NonEmpty.Map: maxViewWithKey :: Ord k => T k a -> ((k, a), Map k a)
+ Data.NonEmpty.Map: maxViewWithKey :: (Ord k) => T k a -> ((k, a), Map k a)
- Data.NonEmpty.Map: member :: Ord k => k -> T k a -> Bool
+ Data.NonEmpty.Map: member :: (Ord k) => k -> T k a -> Bool
- Data.NonEmpty.Map: union :: Ord k => T k a -> T k a -> T k a
+ Data.NonEmpty.Map: union :: (Ord k) => T k a -> T k a -> T k a
- Data.NonEmpty.Map: unionLeft :: Ord k => Map k a -> T k a -> T k a
+ Data.NonEmpty.Map: unionLeft :: (Ord k) => Map k a -> T k a -> T k a
- Data.NonEmpty.Map: unionRight :: Ord k => T k a -> Map k a -> T k a
+ Data.NonEmpty.Map: unionRight :: (Ord k) => T k a -> Map k a -> T k a
- Data.NonEmpty.Match: replicate :: Functor f => f a -> b -> f b
+ Data.NonEmpty.Match: replicate :: (Functor f) => f a -> b -> f b
- Data.NonEmpty.Match: take :: Zip f => f b -> f a -> f a
+ Data.NonEmpty.Match: take :: (Zip f) => f b -> f a -> f a
- Data.NonEmpty.Mixed: appendLeft :: Cons f => [a] -> f a -> f a
+ Data.NonEmpty.Mixed: appendLeft :: (Cons f) => [a] -> f a -> f a
- Data.NonEmpty.Mixed: filterToInfixes :: Foldable f => (a -> Bool) -> f a -> [T [] a]
+ Data.NonEmpty.Mixed: filterToInfixes :: (Foldable f) => (a -> Bool) -> f a -> [T [] a]
- Data.NonEmpty.Mixed: groupBy :: Foldable f => (a -> a -> Bool) -> f a -> [T [] a]
+ Data.NonEmpty.Mixed: groupBy :: (Foldable f) => (a -> a -> Bool) -> f a -> [T [] a]
- Data.NonEmpty.Mixed: last :: ViewR f => T f a -> a
+ Data.NonEmpty.Mixed: last :: (ViewR f) => T f a -> a
- Data.NonEmpty.Mixed: segmentAfter :: Foldable f => (a -> Bool) -> f a -> ([T [] a], [a])
+ Data.NonEmpty.Mixed: segmentAfter :: (Foldable f) => (a -> Bool) -> f a -> ([T [] a], [a])
- Data.NonEmpty.Mixed: segmentBefore :: Foldable f => (a -> Bool) -> f a -> ([a], [T [] a])
+ Data.NonEmpty.Mixed: segmentBefore :: (Foldable f) => (a -> Bool) -> f a -> ([a], [T [] a])
- Data.NonEmpty.Set: flatten :: Ord a => T a -> Set a
+ Data.NonEmpty.Set: flatten :: (Ord a) => T a -> Set a
- Data.NonEmpty.Set: fromList :: Ord a => T [] a -> T a
+ Data.NonEmpty.Set: fromList :: (Ord a) => T [] a -> T a
- Data.NonEmpty.Set: maxView :: Ord a => T a -> (a, Set a)
+ Data.NonEmpty.Set: maxView :: (Ord a) => T a -> (a, Set a)
- Data.NonEmpty.Set: member :: Ord a => a -> T a -> Bool
+ Data.NonEmpty.Set: member :: (Ord a) => a -> T a -> Bool
- Data.NonEmpty.Set: union :: Ord a => T a -> T a -> T a
+ Data.NonEmpty.Set: union :: (Ord a) => T a -> T a -> T a
- Data.NonEmpty.Set: unionLeft :: Ord a => Set a -> T a -> T a
+ Data.NonEmpty.Set: unionLeft :: (Ord a) => Set a -> T a -> T a
- Data.NonEmpty.Set: unionRight :: Ord a => T a -> Set a -> T a
+ Data.NonEmpty.Set: unionRight :: (Ord a) => T a -> Set a -> T a

Files

non-empty.cabal view
@@ -1,10 +1,10 @@ Name:             non-empty-Version:          0.2.1+Version:          0.3 License:          BSD3 License-File:     LICENSE Author:           Henning Thielemann <haskell@henning-thielemann.de> Maintainer:       Henning Thielemann <haskell@henning-thielemann.de>-Homepage:         http://code.haskell.org/~thielema/non-empty/+Homepage:         http://hub.darcs.net/thielema/non-empty/ Category:         Data Synopsis:         List-like structures with static restrictions on the number of elements Description:@@ -66,17 +66,18 @@ Build-Type:       Simple  Source-Repository this-  Tag:         0.2.1+  Tag:         0.3   Type:        darcs-  Location:    http://code.haskell.org/~thielema/non-empty/+  Location:    http://hub.darcs.net/thielema/non-empty/  Source-Repository head   Type:        darcs-  Location:    http://code.haskell.org/~thielema/non-empty/+  Location:    http://hub.darcs.net/thielema/non-empty/  Library   Build-Depends:     containers >=0.4 && <0.6,+    deepseq >=1.3 && <1.5,     utility-ht >=0.0.1 && <0.1,     QuickCheck >=2.1 && <3,     base >=4 && <5@@ -95,5 +96,6 @@     Data.Append     Data.Zip   Other-Modules:+    Data.NonEmpty.Foldable     Data.NonEmptyPrivate     Data.NonEmptyTest
src/Data/Append.hs view
@@ -1,6 +1,8 @@ module Data.Append where +import qualified Data.NonEmpty.Class as C import Control.Applicative (liftA2)+import Control.DeepSeq (NFData, rnf, ) import Data.Traversable (Traversable, traverse) import Data.Foldable (Foldable, foldMap) import Data.Monoid (mappend)@@ -22,3 +24,10 @@  instance (Traversable f, Traversable g) => Traversable (T f g) where    traverse f (Cons xs ys) = liftA2 Cons (traverse f xs) (traverse f ys)+++instance (C.NFData f, C.NFData g) => C.NFData (T f g) where+   rnf (Cons f g) = rnf (C.rnf f, C.rnf g)++instance (C.NFData f, C.NFData g, NFData a) => NFData (T f g a) where+   rnf = C.rnf
src/Data/Empty.hs view
@@ -5,6 +5,7 @@ import qualified Data.Traversable as Trav import qualified Data.Foldable as Fold import Control.Applicative (pure, )+import Control.DeepSeq (NFData, rnf, )  import qualified Test.QuickCheck as QC @@ -64,3 +65,9 @@ -} instance C.Iterate T where    iterate _ _ = Cons++instance C.NFData T where+   rnf Cons = ()++instance NFData (T a) where+   rnf Cons = ()
src/Data/NonEmpty.hs view
@@ -18,6 +18,7 @@    foldl1,    foldl1Map,    foldBalanced,+   foldBalancedStrict,    maximum, maximumBy, maximumKey,    minimum, minimumBy, minimumKey,    sum,@@ -29,9 +30,8 @@    Insert(insert), insertDefault,    InsertBy(insertBy),    scanl, scanr,-   Tails(tails),-   inits, initsRev,-   RemoveEach(removeEach),+   tails, inits, initsRev,+   removeEach,    ) where  import Data.NonEmptyPrivate
src/Data/NonEmpty/Class.hs view
@@ -1,10 +1,13 @@ module Data.NonEmpty.Class where  import qualified Data.Sequence as Seq+import qualified Data.Map as Map import qualified Data.Set as Set import qualified Data.List.HT as ListHT import qualified Data.List as List+import qualified Control.DeepSeq as DeepSeq import Data.Sequence (Seq, )+import Data.Map (Map, ) import Data.Set (Set, ) import Data.Traversable (Traversable, mapAccumL, mapAccumR) import Control.Monad (liftM2, )@@ -28,6 +31,9 @@ instance Empty Set where    empty = Set.empty +instance Empty (Map k) where+   empty = Map.empty+ instance Empty Seq where    empty = Seq.empty @@ -184,7 +190,10 @@ instance Repeat [] where    repeat = List.repeat +instance Repeat Maybe where+   repeat = Just + -- might be replaced by Mixed.iterate based on Traversable class Repeat f => Iterate f where    iterate :: (a -> a) -> a -> f a@@ -192,7 +201,10 @@ instance Iterate [] where    iterate = List.iterate +instance Iterate Maybe where+   iterate _ = Just + {- | We need to distinguish between 'Sort' and 'SortBy', since there is an @instance Sort Set@@@ -263,3 +275,19 @@ instance Arbitrary [] where    arbitrary = QC.arbitrary    shrink = QC.shrink+++class NFData f where+   rnf :: DeepSeq.NFData a => f a -> ()++instance NFData Maybe where+   rnf = DeepSeq.rnf++instance NFData [] where+   rnf = DeepSeq.rnf++instance NFData Set where+   rnf = DeepSeq.rnf++instance (DeepSeq.NFData k) => NFData (Map k) where+   rnf = DeepSeq.rnf
+ src/Data/NonEmpty/Foldable.hs view
@@ -0,0 +1,20 @@+module Data.NonEmpty.Foldable where++import qualified Data.Foldable as Fold+import Data.Foldable (Foldable, )+++{- |+It holds:++> foldMap f . Mapped g = foldMap f . fmap g++but use of 'Mapped' avoids 'Functor' constraint.+-}+data Mapped f a b = Mapped (a -> b) (f a)+++instance (Foldable f) => Foldable (Mapped f a) where+   foldMap g (Mapped f xs) = Fold.foldMap (g . f) xs+   foldr g x (Mapped f xs) = Fold.foldr (g . f) x xs+   foldl g x (Mapped f xs) = Fold.foldl (\acc -> g acc . f) x xs
src/Data/NonEmpty/Map.hs view
@@ -17,9 +17,12 @@    union,    unionLeft,    unionRight,+   map,+   mapWithKey,    ) where  import qualified Data.NonEmpty.Set as NonEmptySet+import qualified Data.NonEmpty.Class as C import qualified Data.NonEmpty as NonEmpty  import qualified Data.Map as Map@@ -27,6 +30,7 @@  import Control.Monad (mzero, ) import Control.Applicative (liftA2, )+import Control.DeepSeq (NFData, rnf, ) import Data.Traversable (Traversable, traverse, ) import Data.Foldable (Foldable, foldMap, ) import Data.Monoid (mappend, )@@ -34,7 +38,7 @@ import Data.Tuple.HT (forcePair, mapSnd, ) import Data.Ord.HT (comparing, ) -import Prelude hiding (lookup, )+import Prelude hiding (map, lookup, )   {-@@ -50,7 +54,7 @@          showsPrec 11 (toAscList xs)  instance (Ord k) => Functor (T k) where-   fmap f (Cons x xs) = Cons (mapSnd f x) (fmap f xs)+   fmap = map  instance (Ord k) => Foldable (T k) where    foldMap f (Cons x xs) = mappend (f (snd x)) (foldMap f xs)@@ -59,7 +63,13 @@    traverse f (Cons x xs) =       liftA2 Cons (fmap ((,) (fst x)) $ f (snd x)) (traverse f xs) +instance (NFData k, NFData a) => NFData (T k a) where+   rnf = C.rnf +instance (NFData k) => C.NFData (T k) where+   rnf (Cons x xs) = rnf (x, C.rnf xs)++ insert :: Ord k => k -> a -> Map k a -> T k a insert = curry $ insertGen fst @@ -138,3 +148,9 @@ unionRight :: (Ord k) => T k a -> Map k a -> T k a unionRight (Cons x xs) ys =    insertGen fst x $ Map.union xs ys++map :: (Ord k) => (a -> b) -> T k a -> T k b+map f (Cons x xs) = Cons (mapSnd f x) (Map.map f xs)++mapWithKey :: (Ord k) => (k -> a -> b) -> T k a -> T k b+mapWithKey f (Cons x@(k,_a) xs) = Cons (k, uncurry f x) (Map.mapWithKey f xs)
src/Data/NonEmpty/Mixed.hs view
@@ -8,6 +8,7 @@ -} module Data.NonEmpty.Mixed where +import qualified Data.NonEmpty.Foldable as FoldU import qualified Data.NonEmpty.Class as C import qualified Data.NonEmpty as NonEmpty import qualified Data.Empty as Empty@@ -15,6 +16,7 @@ import Data.Traversable (Traversable, mapAccumL, sequenceA, ) import Data.Foldable (Foldable, foldr, ) import Data.Tuple.HT (mapFst, mapSnd, )+import Data.Eq.HT (equating, )  import Prelude hiding (splitAt, take, foldr, scanl, scanr, ) @@ -34,6 +36,34 @@                   [] -> ([],yt)          in  NonEmpty.Cons x0 xr : yr)       []++groupPairs :: (Foldable f, Eq a) => f (a,b) -> [(a, NonEmpty.T [] b)]+groupPairs =+   map (\xs -> (fst $ NonEmpty.head xs, fmap snd xs)) .+   groupBy (equating fst)++groupKey :: (Foldable f, Eq a) => (b -> a) -> f b -> [(a, NonEmpty.T [] b)]+groupKey f = groupPairs . FoldU.Mapped (\b -> (f b, b))++groupEithers ::+   (Foldable f) =>+   f (Either a b) -> [Either (NonEmpty.T [] a) (NonEmpty.T [] b)]+groupEithers =+   foldr+      (\x xs ->+         case x of+            Left a ->+               uncurry (:) $ mapFst (Left . NonEmpty.Cons a) $+               case xs of+                  Left as : ys -> (NonEmpty.flatten as, ys)+                  ys -> ([], ys)+            Right b ->+               uncurry (:) $ mapFst (Right . NonEmpty.Cons b) $+               case xs of+                  Right bs : ys -> (NonEmpty.flatten bs, ys)+                  ys -> ([], ys))+      []+  segmentAfter ::    (Foldable f) =>
src/Data/NonEmpty/Set.hs view
@@ -4,24 +4,34 @@    singleton,    member,    size,-   minView,-   maxView,    fromList,    toAscList,+   fetch,    flatten,    union,    unionLeft,    unionRight,++   findMin,+   findMax,+   deleteMin,+   deleteMax,+   deleteFindMin,+   deleteFindMax,+   minView,+   maxView,    ) where +import qualified Data.NonEmpty.Class as C import qualified Data.NonEmpty as NonEmpty  import qualified Data.Set as Set import Data.Set (Set, )  import Control.Monad (mzero, )+import Control.DeepSeq (NFData, rnf, ) import Data.Maybe (fromMaybe, )-import Data.Tuple.HT (forcePair, )+import Data.Tuple.HT (forcePair, mapSnd, )   {-@@ -40,6 +50,13 @@          showsPrec 11 (toAscList xs)  +instance (NFData a) => NFData (T a) where+   rnf = C.rnf++instance C.NFData T where+   rnf (Cons x xs) = rnf (x, C.rnf xs)++ {- | We cannot have a reasonable @instance Insert Set@, since the @instance Insert (NonEmpty Set)@@@ -80,6 +97,33 @@ size :: T a -> Int size (Cons _ xs) = 1 + Set.size xs ++findMin :: T a -> a+findMin (Cons x _) = x++findMax :: T a -> a+findMax (Cons x xs) =+   if Set.null xs then x else Set.findMax xs+++deleteMin :: T a -> Set a+deleteMin (Cons _ xs) = xs++deleteMax :: (Ord a) => T a -> Set a+deleteMax (Cons x xs) =+   if Set.null xs then Set.empty else Set.insert x $ Set.deleteMax xs+++deleteFindMin :: T a -> (a, Set a)+deleteFindMin (Cons x xs) = (x, xs)++deleteFindMax :: (Ord a) => T a -> (a, Set a)+deleteFindMax (Cons x xs) =+   if Set.null xs+     then (x, Set.empty)+     else mapSnd (Set.insert x) $ Set.deleteFindMax xs++ minView :: T a -> (a, Set a) minView (Cons x xs) = (x,xs) @@ -90,12 +134,16 @@       Nothing -> (x,xs)       Just (y,ys) -> (y, Set.insert x ys) + fromList :: (Ord a) => NonEmpty.T [] a -> T a fromList (NonEmpty.Cons x xs) = insert x $ Set.fromList xs  toAscList :: T a -> NonEmpty.T [] a toAscList (Cons x xs) = NonEmpty.Cons x $ Set.toAscList xs +fetch :: (Ord a) => Set a -> Maybe (T a)+fetch  =  fmap (uncurry Cons) . Set.minView+ flatten :: (Ord a) => T a -> Set a flatten (Cons x xs) = Set.insert x xs @@ -116,3 +164,16 @@ unionRight :: (Ord a) => T a -> Set a -> T a unionRight (Cons x xs) ys =    insertGen fst x $ Set.union xs ys+++{-+According Set functions are only available since containers-0.5.2, i.e. GHC-7.8.++elemAt :: Int -> T a -> a+elemAt k (Cons x xs) =+   if k==0 then x else Set.elemAt (pred k) xs++deleteAt :: Int -> T a -> Set a+deleteAt k (Cons _ xs) =+   if k==0 then xs else Set.deleteAt (pred k) xs+-}
src/Data/NonEmptyPrivate.hs view
@@ -1,5 +1,6 @@ module Data.NonEmptyPrivate where +import qualified Data.NonEmpty.Foldable as FoldU import qualified Data.NonEmpty.Class as C import qualified Data.Empty as Empty @@ -15,18 +16,19 @@ import Data.Foldable (Foldable, ) import Control.Monad (Monad, return, (=<<), ) import Control.Applicative (Applicative, liftA2, pure, (<*>), )+import Control.DeepSeq (NFData, rnf, )  import Data.Functor (Functor, fmap, ) import Data.Function (flip, const, ($), (.), ) import Data.Maybe (Maybe(Just, Nothing), maybe, mapMaybe, ) import Data.Bool.HT (if', ) import Data.Bool (Bool(True), (&&), )-import Data.Ord (Ord, Ordering(GT), (<), (>), compare, comparing, )+import Data.Ord (Ord, Ordering(GT), (<=), (>), compare, comparing, ) import Data.Eq ((==), ) import Data.Tuple.HT (mapFst, mapSnd, swap, ) import Data.Tuple (fst, snd, ) import qualified Prelude as P-import Prelude (Eq, Show, Num, uncurry, )+import Prelude (Eq, Show, Num, Int, uncurry, ($!), )  import qualified Test.QuickCheck as QC @@ -67,6 +69,14 @@ data T f a = Cons { head :: a, tail :: f a }    deriving (Eq, Ord) ++instance (C.NFData f, NFData a) => NFData (T f a) where+   rnf = C.rnf++instance (C.NFData f) => C.NFData (T f) where+   rnf (Cons x xs) = rnf (x, C.rnf xs)++ instance (C.Show f, Show a) => Show (T f a) where    showsPrec = C.showsPrec @@ -277,8 +287,14 @@ in order to get the same result as 'foldl1' or 'foldr1'. -} foldBalanced :: (a -> a -> a) -> T [] a -> a-foldBalanced f xs@(Cons _ rs) =-   let reduce (z0:z1:zs) = f z0 z1 : reduce zs+foldBalanced = foldBalancedGen (:)++foldBalancedStrict :: (a -> a -> a) -> T [] a -> a+foldBalancedStrict = foldBalancedGen (\x -> ((:) $! x))++foldBalancedGen :: (a -> [a] -> [a]) -> (a -> a -> a) -> T [] a -> a+foldBalancedGen listCons f xs@(Cons _ rs) =+   let reduce (z0:z1:zs) = listCons (f z0 z1) (reduce zs)        reduce zs = zs        ys = appendRight xs $ Match.take rs $ reduce $ flatten ys    in  last ys@@ -303,18 +319,12 @@ -- | maximumKey is a total function maximumKey :: (Ord b, Foldable f) => (a -> b) -> T f a -> a maximumKey f =-   snd .-   foldl1Map-      (\ky0 ky1 -> if fst ky0 < fst ky1 then ky1 else ky0)-      (attachKey f)+   snd . Fold.maximumBy (comparing fst) . FoldU.Mapped (attachKey f)  -- | minimumKey is a total function minimumKey :: (Ord b, Foldable f) => (a -> b) -> T f a -> a minimumKey f =-   snd .-   foldl1Map-      (\ky0 ky1 -> if fst ky0 > fst ky1 then ky1 else ky0)-      (attachKey f)+   snd . Fold.minimumBy (comparing fst) . FoldU.Mapped (attachKey f)  -- | maximumKey is a total function _maximumKey :: (Ord b, Foldable f, Functor f) => (a -> b) -> T f a -> a@@ -520,59 +530,31 @@   -class Functor f => RemoveEach f where-   removeEach :: T f a -> T f (a, f a)+mapWithIndex :: (Traversable f) => (Int -> a -> b) -> Int -> f a -> f b+mapWithIndex f n = snd . mapAccumL (\k x -> (P.succ k, f k x)) n -instance RemoveEach [] where-   removeEach (Cons x xs) =-      Cons (x, xs) (fmap (mapSnd (x:)) $ ListHT.removeEach xs)+removeAt :: (Traversable f) => Int -> T f a -> (a, f a)+removeAt n (Cons x0 xs) =+   mapAccumL (\x (k,y) -> if k<=n then (y,x) else (x,y)) x0 $+   mapWithIndex (,) 1 xs -instance RemoveEach Empty.T where-   removeEach (Cons x Empty.Cons) = Cons (x, Empty.Cons) Empty.Cons+removeEach :: (Traversable f) => T f a -> T f (a, f a)+removeEach xs  =  mapWithIndex (\n _ -> removeAt n xs) 0 xs -instance RemoveEach f => RemoveEach (T f) where-   removeEach (Cons x xs) =-      Cons (x, xs) (fmap (mapSnd (x !:)) $ removeEach xs) -instance RemoveEach Maybe where-   removeEach (Cons x0 xs) =-      (\ ~(a,b) -> Cons (x0, a) b) $-      case xs of-         Nothing -> (Nothing, Nothing)-         Just x1 -> (Just x1, Just (x1, Just x0)) - {- It is somehow better than the variant in NonEmpty.Mixed, since it can be applied to nested NonEmptys.--}-class Tails f where-   tails :: (C.Cons g, C.Empty g) => f a -> T f (g a) -instance Tails [] where-   tails = tailsTraversable--instance Tails Empty.T where-   tails Empty.Cons = Cons C.empty Empty.Cons--instance Tails f => Tails (T f) where-   tails (Cons x xs) =-      case tails xs of-         xss -> Cons (C.cons x $ head xss) xss--instance Tails Maybe where-   tails xs =-      force $-      case xs of-         Nothing -> Cons C.empty Nothing-         Just x -> Cons (C.cons x C.empty) (Just C.empty)--instance Tails Seq where-   tails = tailsTraversable--tailsTraversable :: (Traversable f, C.Cons g, C.Empty g) => f a -> T f (g a)-tailsTraversable =-   uncurry cons . mapAccumR (\xs x -> (C.cons x xs, xs)) C.empty+Type @g@ could be fixed to List,+since context (C.Cons g, C.Empty g) means+that @g@ is a supertype of something isomorphic to list.+However, repeatedly prepending an element might be more efficient+than repeated conversion from list to a structure like Sequence.+-}+tails :: (Traversable f, C.Cons g, C.Empty g) => f a -> T f (g a)+tails = scanr C.cons C.empty   {- |@@ -580,9 +562,7 @@ like 'Sequence'. Alternatively you may consider 'initsRev'. -}-inits ::-   (Traversable f, C.Snoc g, C.Empty g) =>-   f a -> T f (g a)+inits :: (Traversable f, C.Snoc g, C.Empty g) => f a -> T f (g a) inits = scanl C.snoc C.empty  {-@@ -686,3 +666,10 @@    (Traversable f) => (a -> a -> b) -> T f a -> f b mapAdjacent f (Cons x xs) =    snd $ mapAccumL (\a0 a1 -> (a1, f a0 a1)) x xs++{-+A nice function but not particularly related to NonEmpty.+Maybe move it to Class module?+-}+mapAdjacent1 :: (Traversable f) => (a -> a -> b -> c) -> a -> f (a,b) -> f c+mapAdjacent1 f = (snd.) . mapAccumL (\a0 (a1,b) -> (a1, f a0 a1 b))
src/Data/Optional.hs view
@@ -13,6 +13,7 @@ import qualified Data.Traversable as Trav import qualified Data.Foldable as Fold import Control.Applicative (pure, liftA2, )+import Control.DeepSeq (NFData, rnf, )  import qualified Test.QuickCheck as QC @@ -20,7 +21,6 @@ import Data.Functor (fmap, ) import Data.Function (($), (.), ) import Data.Ord (Ord, Ordering(GT), (>), )-import Data.Tuple.HT (mapSnd, ) import qualified Prelude as P import Prelude (Eq, uncurry, ) @@ -35,6 +35,14 @@ fromNonEmpty (NonEmpty.Cons x xs) = Cons x xs  +instance (C.NFData f, NFData a) => NFData (T f a) where+   rnf = C.rnf++instance (C.NFData f) => C.NFData (T f) where+   rnf Nil = ()+   rnf (Cons x xs) = rnf (x, C.rnf xs)++ instance (C.Show f, P.Show a) => P.Show (T f a) where    showsPrec = C.showsPrec @@ -81,6 +89,9 @@ instance (C.Repeat f) => C.Repeat (T f) where    repeat x = Cons x $ C.repeat x +instance (C.Iterate f) => C.Iterate (T f) where+   iterate f x = Cons x $ C.iterate f (f x)+ instance C.Zip f => C.Zip (T f) where    zipWith f (Cons x xs) (Cons y ys) = Cons (f x y) (C.zipWith f xs ys)    zipWith _ _ _ = Nil@@ -119,19 +130,3 @@             case f y x of                GT -> (x, fromNonEmpty $ NonEmpty.insertBy f y xs)                _ -> (y, xt)--instance NonEmpty.RemoveEach f => NonEmpty.RemoveEach (T f) where-   removeEach (NonEmpty.Cons x Nil) = NonEmpty.Cons (x, Nil) Nil-   removeEach (NonEmpty.Cons x0 xs0@(Cons x1 xs1)) =-      NonEmpty.Cons (x0, xs0) $-      fmap (mapSnd (x0 ?:)) $-      fromNonEmpty $ NonEmpty.removeEach $ NonEmpty.Cons x1 xs1--instance NonEmpty.Tails f => NonEmpty.Tails (T f) where-   tails xt =-      NonEmpty.force $-      case xt of-         Nil -> NonEmpty.Cons C.empty Nil-         Cons x xs ->-            case NonEmpty.tails xs of-               xss -> NonEmpty.Cons (C.cons x $ NonEmpty.head xss) (fromNonEmpty xss)
src/Data/Zip.hs view
@@ -5,6 +5,7 @@ import qualified Data.Traversable as Trav import Data.Traversable (Traversable, ) import Control.Applicative (Applicative, pure, (<*>), )+import Control.DeepSeq (NFData, rnf, )   {- |@@ -18,6 +19,13 @@ instance (C.Zip f, C.Repeat f) => Applicative (T f) where    pure a = Cons $ C.repeat a    Cons f <*> Cons x = Cons $ C.zipWith ($) f x+++instance (C.NFData f, NFData a) => NFData (T f a) where+   rnf = C.rnf++instance (C.NFData f) => C.NFData (T f) where+   rnf = C.rnf . decons   {- |