Description
See #183 (comment) for a proposed API
It looks like there are a few missing functions
and instances
across the different list modules in this library. To tackle this more systematically, I found the contents of each of the cells of a 4-way Venn diagram created by comparing the following modules:
- Basic (List)
- Lazy[List]
- NonEmpty[List]
- LazyNonEmpty[List]
I've only looked over the instances
so far. These appear to be the gaps:
Lazy
missing fromLazyNonEmptyList
Eq1
,Ord1
missing fromNonEmptyList
,LazyNonEmptyList
Foldable1
,Traversable1
missing fromLazyNonEmptyList
Here are some notes on the remaining differences, which appear to be fine:
- Missing from
*NonEmptyList
Monoid - Needs empty Plus - Needs empty Alternative - Needs Plus MonadZero - Needs Alternative MonadPlus - Needs MonadZero Unfoldable - Only if you can produce an empty container
Comonad
is only in*NonEmptyList
, since you can'textract
something from an empty list.- Only non-basic lists need the
Newtype
convenience wrapper.
I still need to look through the functions
. Feel free to help me flag or dismiss any of those differences.
Here's a brief explanation of how to read an entry in the listing of cells. For example in this entry:
-----
LazyNonEmpty NonEmpty
-----
Comonad
It means that Comonad
appears only in LazyNonEmpty
and NonEmpty
, but not in any other modules. More specifically, Comonad
is the output of:
intersections [LazyNonEmpty, NonEmpty] `difference` unions [Basic, NonEmpty]
This diagram might help with visualizing the "cells":
Here's the full listing (empty cells omitted).
Instances:
-----
Lazy LazyNonEmpty Basic NonEmpty
-----
Alt
Applicative
Apply
Bind
Eq
Extend
Foldable
FoldableWithIndex
Functor
FunctorWithIndex
Monad
Ord
Semigroup
Show
Traversable
TraversableWithIndex
Unfoldable1
-----
Lazy LazyNonEmpty NonEmpty
-----
Newtype
-----
LazyNonEmpty NonEmpty
-----
Comonad
-----
NonEmpty
-----
Foldable1
Traversable1
-----
Lazy Basic
-----
Alternative
Eq1
MonadPlus
MonadZero
Monoid
Ord1
Plus
Unfoldable
-----
Lazy
-----
Lazy
Functions:
-----
Lazy LazyNonEmpty Basic NonEmpty
-----
concatMap
fromFoldable
head
init
last
length
singleton
tail
toUnfoldable
uncons
-----
Lazy Basic NonEmpty
-----
(!!), index
catMaybes
concat
drop
dropWhile
elemIndex
elemLastIndex
filter
filterM
findIndex
findLastIndex
foldM
group
groupBy
insertAt
intersect
intersectBy
mapMaybe
modifyAt
nub
nubBy
partition
reverse
snoc
span
take
takeWhile
union
unionBy
unzip
updateAt
zip
zipWith
zipWithA
-----
Basic NonEmpty
-----
group'
mapWithIndex
sort
sortBy
unsnoc
-----
LazyNonEmpty NonEmpty
-----
appendFoldable
fromList
toList
-----
NonEmpty
-----
cons
cons'
snoc'
-----
Lazy Basic
-----
(..), range
(\\), difference
Pattern(..)
alterAt
delete
deleteAt
deleteBy
insert
insertBy
many
null
slice
some
stripPrefix
transpose
-----
Basic
-----
dropEnd
manyRec
someRec
takeEnd
-----
Lazy LazyNonEmpty
-----
iterate
repeat
-----
Lazy
-----
cycle
foldrLazy
replicate
replicateM
scanrLazy