<3T      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSNone It must hold:  fmap f xs " = zipWith (\x _ -> f x) xs xs " = zipWith (\_ x -> f x) xs xs 5 TUVWXYZ[\]^_`abcdefghijklmno    )   TUVWXYZ[\]^_`abcdefghijklmnoNone pqrstuvwxyz pqrstuvwxyzNone! The type !4 can be used for many kinds of list-like structures with restrictions on the size.   T [] a1 is a lazy list containing at least one element.  T (T []) a2 is a lazy list containing at least two elements.   T Vector a( is a vector with at least one element. Q You may also use unboxed vectors but the first element will be stored in a box C and you will not be able to use many functions from this module.   T Maybe a. is a list that contains one or two elements.  Maybe is isomorphic to Optional Empty.   T Empty a. is a list that contains exactly one element.   T (T Empty) a/ is a list that contains exactly two elements.  Optional (T Empty) a/ is a list that contains zero or two elements. H You can create a list type for every finite set of allowed list length 1 by nesting Optional and NonEmpty constructors.  If list length n is allowed, then place Optional at depth n, ! if it is disallowed then place NonEmpty. ! The maximm length is marked by Empty. &$Force immediate generation of Cons. 'Implementation of  without the  constraint that is needed for  . (Implementation of    without the  constraint that is needed for   . { It holds:  # foldl1Map g f = foldl1 f . fmap g but { does not need a | instance. 4maximum is a total function 5minimum is a total function 6maximumBy is a total function 7minimumBy is a total function 8maximumKey is a total function 9minimumKey is a total function }maximumKey is a total function ~minimumKey is a total function :,sum does not need a zero for initialization ;/product does not need a one for initialization ?generic variants:   or better Semigroup.cycle A%If you nest too many non-empty lists ;then the efficient merge-sort (linear-logarithmic runtime) Cwill degenerate to an inefficient insert-sort (quadratic runtime). CCInsert an element into an ordered list while preserving the order. BThe first element of the resulting list is returned individually. 3We need this for construction of a non-empty list. D"Always returns a rectangular list 2by clipping all dimensions to the shortest slice. Be aware that  transpose [] == repeat []. b !"#$%&'()*+,-./0123{456789}~:;<=>?@ABCDEFG@ !"#$%&'()*+,-./0123{456789}~:;<=>?@ABCDEFGV !"#$%&'()*+,-./0123{456789}~:;<=>?@ABCDEFGNone- !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFG-!"#$%&'()*+,-./0123468579:;<>=?@GAB CEFDNoneHIJKLMHIJKLMHIJKLMHIJKLMNoneNOPQRSNOPQRSNPOSQRNPOQRS !"#$%&'(")*+,-.("/01234567#89:;<=>?@ABCDEF'GHIJKLMK*NF("OPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~oqpsuvwxyopqrsuvwxynon-empty-0.1.2Data.NonEmpty.Class Data.Empty Data.NonEmptyData.NonEmpty.Mixed Data.OptionalData.NonEmptyPrivate Applicative<*>pureMonad>>=returnData.Monoid.HTcycle Arbitrary arbitraryshrinkShow showsPrecReversereverseSortsortByRepeatrepeatZipzipWithAppendappend Singleton singletonViewviewLConsconsEmptyemptyzipsortTTailstails RemoveEach removeEachInsertinsertByheadtail!:forceapplybindtoListflattenfetchmapHeadmapTailinitlastfoldl1maximumminimum maximumBy minimumBy maximumKey minimumKeysumproduct appendRight appendLeftinsert transposeClipscanlscanr mapAdjacentgroupBy segmentBeforeinitsNil fromEmpty fromNonEmpty?: $fArbitrary[]$fShow[] $fReverseSeq$fReverseMaybe $fReverse[] $fSortSeq $fSortMaybe$fSort[] $fRepeat[]$fZipSeq $fZipMaybe$fZip[] $fAppendSeq $fAppend[]$fSingletonSeq$fSingletonSet$fSingletonMaybe $fSingleton[] $fViewSeq $fViewSet $fViewMaybe$fView[] $fConsSeq$fCons[] $fEmptySeq $fEmptySet $fEmptyMaybe $fEmpty[]$fSortT $fReverseT$fZipT$fEmptyT $fArbitraryT$fViewT$fTraversableT $fFoldableT $fFunctorT$fShowT$fShowT0 foldl1MapbaseGHC.BaseFunctor _maximumKey _minimumKeyTransposeInnertransposeStart zipHeadTailTransposeOuter transposeunZipAux snocExtend attachKey tailsDefaulttransposePrelude propTransposepropTransposePrelude$fTransposeInner[]$fTransposeOuter[]$fApplicativeZip $fFunctorZip $fTailsSeq $fTailsMaybe$fTailsT $fTailsT0 $fTails[]$fRemoveEachMaybe $fRemoveEachT$fRemoveEachT0$fRemoveEach[] $fInsertSeq $fInsertMaybe $fInsert[] $fInsertT $fInsertT0 $fRepeatT $fAppendT $fSingletonT$fConsT$fArbitraryAux$fMonadT$fApplicativeT