h$C=      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~(c) 2020-2021 Emily Pillmore BSD-3-ClauseEmily Pillmore , Asad Saeeduddin  Experimental non-portableSafef(c) 2020-2021 Emily Pillmore BSD-3-Clause$Emily Pillmore  Experimental!CPP, RankNTypes, TypeApplicationsSafe 38:;(smashA type operator synonym for smashThe  data type represents values with two non-exclusive possibilities, as well as an empty case. This is a product of pointed types - i.e. of  values. The result is a type,  a b, which is isomorphic to  (These a b).smashCase elimination for the  datatypesmashCase elimination for the " datatype, with uniform behaviour.smashCase elimination for the * datatype, with uniform behaviour over a  result. smashCase elimination for the * datatype, with uniform behaviour over a  result in the context of an . smashProject the left value of a ! datatype. This is analogous to  for (','). smashProject the right value of a ! datatype. This is analogous to  for (','). smash Detect if a  is a  case. smash Detect if a  is a  case.smash Detect if a  is a  case.smash Detect if a  is a  case.smashGiven a  of s, collect the values of the  cases, if any.smashGiven a  of s, collect the values of the  cases, if any.smashGiven a  of s, collect the values of the  cases, if any.smash Filter the  cases of a  of  values.smash Filter the  cases of a  of  values.smash Filter the  cases of a  of  values.smash Filter the  cases of a  of  values.smashFold over the  cases of a  of !s by some accumulating function.smashFold over the  cases of a  of !s by some accumulating function.smashFold over the  cases of a  of !s by some accumulating function.smash Gather a $ of two lists and produce a list of  values, mapping the 1 case to the empty list, One' case to a list of s, the  case to a list of s, or zipping  along both lists.smashUnfold from right to left into a pointed product. For a variant that accumulates in the seed instead of just updating with a new value, see  and  .smashUnfold from right to left into a monadic computation over a pointed productsmash.Iterate on a seed, accumulating a result. See  for more details.smash=Iterate on a seed, which may result in one of four scenarios: The function yields a Non- value, which terminates the iteration.The function yields a One value.The function yields a Eno value, which changes the seed and iteration continues with the new seed.The function yields the a value of a Two case.smashIterate on a seed, accumulating values and monoidally updating the seed with each update. smashIterate on a seed, accumulating values and monoidally updating a seed within a monad.!smashPartition a list of  values into a triple of lists of all of their constituent parts"smashPartition a list of ! values, separating them into a - value of lists of left and right values, or  in the case of an empty list.#smashGiven a  of :s, partition it into a tuple of alternatives their parts.$smash3Partition a structure by mapping its contents into s, and folding over ().%smash Distribute a  value over a product.&smash Codistribute a coproduct over a  value.'smashRe-associate a  of cans from left to right.(smashRe-associate a  of cans from right to left.)smash"Swap the positions of values in a .*smashCurry a function from a  to a , value, resulting in a function of curried , values. This is analogous to currying for (->).+smashUncurry a function from a  to a , value, resulting in a function of curried . values. This is analogous to uncurrying for (->).smash default value to supply for the  casesmasheliminator for the  casesmasheliminator for the  casesmasheliminator for the  casesmash default value to supply for the  casesmasheliminator for the  casesmasheliminator for the  casesmashmerger for the  casesmasheliminator for the  casesmasheliminator for the  case smasheliminator for the  casesmasheliminator for the  case,  !"#$%&'()*+,   *+#!"$%&'()(c) 2020-2021 Emily Pillmore BSD-3-Clause$Emily Pillmore  Experimental Non-portableSafe >?jQsmash?A monad transformer for the pointed product, parameterized by:a - the value on the leftb - the value on the rightm* - The monad over a pointed product (see: ).%This monad transformer is similar to TheseT8, except with the possibility of an empty unital value.SsmashMap both the left and right values and output of a computation using the given function. R (S f m) = f . R mQRSQRS(c) 2020-2021 Emily Pillmore BSD-3-Clause$Emily Pillmore  Experimental!CPP, RankNTypes, TypeApplicationsSafe 38:;) ]smashA type operator synonym for ^.^smashThe ^ data type represents values with two exclusive possibilities, and an empty case. This is a coproduct of pointed types - i.e. of  values. The result is a type, 'Wedge a b', which is isomorphic to  ( a b).bsmashCase elimination for the ^ datatype.csmash,Given two possible pointed types, produce a ^ by considering the left case, the right case, and mapping their  cases to _&. This is a pushout of pointed types A  -* - B.dsmashConvert a 'Wedge a b' into a  ( a b) value.esmash Convert a  ( a b) value into a ^fsmash Inject a  value into the ` case of a ^, or _7 if the empty case is given. This is analogous to the  constructor for .gsmash Inject a  value into the a case of a ^, or _7 if the empty case is given. This is analogous to the  constructor for .hsmash Detect if a ^ is a ` case.ismash Detect if a ^ is a a case.jsmash Detect if a ^ is a _ empty case.ksmashGiven a  of ^s, collect the ` cases, if any.lsmashGiven a  of ^s, collect the a cases, if any.msmash Filter the ` cases of a  of ^s.nsmash Filter the a cases of a  of ^s.osmash Filter the _ cases of a  of ^s.psmashFold over the ` cases of a  of ^!s by some accumulating function.qsmashFold over the a cases of a  of ^!s by some accumulating function.rsmashGiven a ^< of lists, produce a list of wedges by mapping the list of as to ` values, or the list of bs to a values.ssmashUnfold from right to left into a wedge product. For a variant that accumulates in the seed instead of just updating with a new value, see w and x.tsmashUnfold from right to left into a monadic computation over a wedge productusmash.Iterate on a seed, accumulating a result. See v for more details.vsmash>Iterate on a seed, which may result in one of three scenarios: The function yields a Nowhere- value, which terminates the iteration.The function yields a Here value.The function yields a There value, which changes the seed and iteration continues with the new seed.wsmashIterate on a seed, accumulating values and monoidally updating the seed with each update.xsmashIterate on a seed, accumulating values and monoidally updating a seed within a monad.ysmashGiven a  of ^:s, partition it into a tuple of alternatives their parts.zsmash3Partition a structure by mapping its contents into ^s, and folding over ().{smashRe-associate a ^ of ^s from left to right.|smashRe-associate a ^ of ^s from left to right.}smash Distribute a ^ over a product.~smash Codistribute ^s over a coproduct.smashSwap the positions of the a 's and the b's in a ^.#]^_`abcdefghijklmnopqrstuvwxyz{|}~#^_`a]cfgdehijbklmnopqrstuvwxyz}~{|(c) 2020-2021 Emily Pillmore BSD-3-Clause$Emily Pillmore  Experimental!CPP, RankNTypes, TypeApplicationsSafe 38:;8$smashA type operator synonym for smashThe  data type represents A value which has either an empty case, or two values. The result is a type, 'Smash a b', which is isomorphic to  (a,b).Categorically, the smash product (the quotient of a pointed product by a wedge sum) has interesting properties. It forms a closed symmetric-monoidal tensor in the category Hask* of pointed haskell types (i.e.  values).smash Convert a  value into a  valuesmash Convert a  value into a  valuesmash.Smash product of pointed type modulo its wedgesmashTake the smash product of a wedge and two default values to place in either the left or right side of the final productsmashProject the left value of a ! datatype. This is analogous to  for (',').smashProject the right value of a ! datatype. This is analogous to  for (',').smashDetect whether a  value is emptysmashDetect whether a  value is not emptysmashCreate a smash product of self-similar values from a pointed object.'This is the diagonal morphism in Hask*.smashSee: . This is always a  value.smashCase elimination for the  datatypesmashGiven a  of s, collect the values of the  cases, if any.smash Filter the  cases of a  of  values.smashFold over the  case of a  of ) products by some accumulating function.smash Gather a , product of two lists and product a list of  values, mapping the  case to the empty list and zipping the two lists together with the  constructor otherwise.smash.Unfold from right to left into a smash productsmashUnfold from right to left into a monadic computation over a smash productsmash.Iterate on a seed, accumulating a result. See  for more details.smash).smashUncurry a map of pointed types to a map of a smash product to a pointed type. This is analogous to  for (->).smashA smash product of wedges is a wedge of smash products. Smash products distribute over coproducts (^s) in pointed HasksmashA wedge of smash products is a smash product of wedges. Smash products distribute over coproducts (^s) in pointed Hasksmash Distribute a  of a pair into a pair of ssmash Distribute a  of a pair into a pair of ssmash Distribute a  of a  into a  of ssmashUndistribute a  of  s into a  of s.smashReassociate a  product from left to right.smashReassociate a  product from right to left.smash"Swap the positions of values in a  a b to form a  b a.&&(c) 2020-2021 Emily Pillmore BSD-3-Clause$Emily Pillmore  Experimental Non-portableSafe >?;smash=A monad transformer for the smash product, parameterized by:a - the value on the leftb - the value on the rightm* - The monad over a pointed product (see: ).smashMap both the left and right values and output of a computation using the given function.  ( f m) = f .  m(c) 2020-2021 Emily Pillmore BSD-3-Clause$Emily Pillmore  Experimental Non-portableSafe >?=smash?A monad transformer for the pointed product, parameterized by:a - the value on the leftb - the value on the rightm, - The monad over a pointed coproduct (see: ^).%This monad transformer is similar to 8, except with the possibility of an empty unital value.smashMap both the left and right values and output of a computation using the given function.  ( f m) = f .  m      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz#$%&'({|/0}~#$%&'(/0"smash-0.1.2-JyUt5QWxQKg2J1iRgHHlBeData.CanControl.Monad.Trans.Can Data.Wedge Data.SmashControl.Monad.Trans.SmashControl.Monad.Trans.WedgeData.Smash.Internal⊗CanNonOneEnoTwocan canWithMergecanEachcanEachAcanFstcanSndisOneisEnoisTwoisNononesenostwos filterOnes filterEnos filterTwos filterNonsfoldOnesfoldEnosfoldTwos gatherCansunfoldrunfoldrM iterateUntil iterateUntilM accumUntil accumUntilM partitionAllpartitionEithers partitionCansmapCans distributeCancodistributeCan reassocLR reassocRLswapCancanCurry canUncurry$fBitraversableCan$fBifoldableCan$fBiapplicativeCan$fBifunctorCan$fMonadPlusCan$fAlternativeCan $fMonadZipCan $fBinaryCan $fMonoidCan$fSemigroupCan $fMonadCan$fApplicativeCan$fTraversableCan $fFoldableCan $fFunctorCan $fHashableCan $fNFDataCan$fHashable2Can$fHashable1Can $fNFData2Can $fNFData1Can $fRead2Can $fRead1Can $fShow2Can $fShow1Can $fOrd2Can $fOrd1Can$fEq2Can$fEq1Can$fEqCan$fOrdCan $fReadCan $fShowCan $fGenericCan$fGeneric1TYPECan $fDataCan$fLiftLiftedRepCanCanTrunCanTmapCanT$fMonadErroreCanT$fMonadTransCanT$fMonadRWSrwsCanT$fMonadStatesCanT$fMonadReaderrCanT$fMonadWriterwCanT $fMonadCanT$fApplicativeCanT $fFunctorCanT∨WedgeNowhereHereTherewedge quotWedge fromWedgetoWedge wedgeLeft wedgeRightisHereisThere isNowhereherestheres filterHeres filterTheresfilterNowheres foldHeres foldTheres gatherWedgespartitionWedges mapWedgesdistributeWedgecodistributeWedge swapWedge$fBitraversableWedge$fBifoldableWedge$fBifunctorWedge$fMonadPlusWedge$fAlternativeWedge$fMonadZipWedge $fBinaryWedge $fNFDataWedge $fMonoidWedge$fSemigroupWedge $fMonadWedge$fApplicativeWedge$fTraversableWedge$fFoldableWedge$fFunctorWedge$fHashableWedge$fNFData2Wedge$fNFData1Wedge$fHashable2Wedge$fHashable1Wedge $fRead2Wedge $fRead1Wedge $fShow2Wedge $fShow1Wedge $fOrd2Wedge $fOrd1Wedge $fEq2Wedge $fEq1Wedge $fEqWedge $fOrdWedge $fReadWedge $fShowWedge$fGenericWedge$fGeneric1TYPEWedge $fDataWedge$fLiftLiftedRepWedge⨳SmashNadatoSmash fromSmash quotSmash hulkSmashsmashFstsmashSndisNadaisSmash smashDiag smashDiag'smashsmashes filterNadas foldSmashes gatherSmashespartitionSmashes mapSmashes smashCurry smashUncurrydistributeSmashundistributeSmash pairSmash unpairSmash pairSmashCanunpairSmashCan swapSmash$fBitraversableSmash$fBifoldableSmash$fBiapplicativeSmash$fBifunctorSmash$fMonadPlusSmash$fAlternativeSmash $fBinarySmash $fNFDataSmash $fMonoidSmash$fSemigroupSmash$fMonadZipSmash $fMonadSmash$fApplicativeSmash$fFunctorSmash$fHashableSmash$fHashable2Smash$fHashable1Smash$fNFData2Smash$fNFData1Smash $fRead2Smash $fRead1Smash $fShow2Smash $fShow1Smash $fOrd2Smash $fOrd1Smash $fEq2Smash $fEq1Smash $fEqSmash $fOrdSmash $fReadSmash $fShowSmash$fGenericSmash$fGeneric1TYPESmash $fDataSmash$fLiftLiftedRepSmashSmashT runSmashT mapSmashT$fMonadTransSmashT$fMonadRWSrwsSmashT$fMonadStatesSmashT$fMonadWriterwSmashT$fMonadReaderrSmashT $fMonadSmashT$fApplicativeSmashT$fFunctorSmashTWedgeT runWedgeT mapWedgeT$fMonadErroreWedgeT$fMonadTransWedgeT$fMonadRWSrwsWedgeT$fMonadStatesWedgeT$fMonadWriterwWedgeT$fMonadReaderrWedgeT $fMonadWedgeT$fApplicativeWedgeT$fFunctorWedgeT unzipFirst undecideFirstbase GHC.MaybeMaybeGHC.BaseMonoid Applicative Data.Tuplefstsnd Data.FoldableFoldable Data.EitherEither<|>NothingLeftRightcurryuncurrytransformers-0.5.6.2Control.Monad.Trans.ExceptExceptT