XILyG      !"#$%&'()*+,-./0123456789 : ; < = > ? @ A B C D E F  Safe-Inferred+3M  Strict Pair The shape of a G A reified H.Strict I Reversed '[]'5 JKLMNOPQRSTUVWXYZ[\]^_`a     #   JKLMNOPQRSTUVWXYZ[\]^_`a Trustworthy1HMPartially apply a # to some initial input on the left."Apply a  to a container full of input:$run ["hello","world"] $ L id (++) [] "helloworld"run [1,2,3] $ L id (+) 06(Apply a  to a single element of input*Lift a  into a b.HThis acts like a generalized notion of "costrength", when applied to a {, causing it to return the left-most value that fails to match the Prism, or the result of accumulating rewrapped in the b if everything matches.9run [Left 1, Left 2, Left 3] $ beneath _Left $ R id (+) 0Left 6;run [Left 1, Right 2, Right 3] $ beneath _Left $ R id (+) 0Right 2 Vbeneath :: Prism s t a b -> p a b -> p s t beneath :: Iso s t a b -> p a b -> p s t  !"#$%&'()* !"#$%&'()*%&'() !"#$* !"#$%&'()* Trustworthy3:HM+A Moore Machine-HConstruct a Moore machine from a state valuation and transition functionc efficient , leaky  +,-defghijklmnco+,-+,-+,-defghijklmnco Trustworthy3:HM.)A strict left fold / strict Moore machine0OConstruct a strict Moore machine from a state valuation and transition functionp efficient , leaky  qr./0stuvwxyz{|}p~./0./0qr./0stuvwxyz{|}p~ Trustworthy:M1A Mealy Machine12121212 Trustworthy:M3A strict Mealy Machine34343434 Trustworthy3:HM5A G+ caught in amber. a.k.a. a monoidal reducer efficient  , efficient  56565656 Trustworthy:M7A semigroup reducer78787878  Trustworthy3:HM9&right folds / a reversed Moore machineleaky  , efficient  9:9:9:9:  Trustworthy:M;A reversed Mealy machine;<;<;<;< (C) 2009-2013 Edward Kmett BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> experimental non-portable Safe-Inferred1 >>3 is a folding homomorphism to a strict left folding " xs (> ) "a " xs   xs (> ) "a > ( xs )  l xs (> ) "a > ( l xs )   (> ) xs "a > (   xs) ! l (> ) xs "a > (! l  xs) left' (> ) "a > (left' ) right' (> ) "a > (right' ) dimap l r (> ) "a > (dimap l r ) extract (> ) "a extract  pure a "a > (pure a) >  <*> >  "a > ( <*> )  a "a > ( a) >   > . k "a > (  k) $ p (> ) "a > ($ p ) ) a (> ) "a > () a ) @+Scan homomorphism to a strict Mealy machineBB0 is a folding homomorphism to a monoidal folding " xs (B ) "a " xs   xs (B ) "a B ( xs )  l xs (B ) "a B ( l xs )   (B ) xs "a B (   xs) ! l (B ) xs "a B (! l  xs) left' (B ) "a B (left' ) right' (B ) "a B (right' ) dimap l r (B ) "a B (dimap l r ) extract (B ) "a extract  pure a "a B (pure a) B  <*> B  "a B ( <*> )  a "a B ( a) B   B . k "a B (  k) $ p (B ) "a B ($ p ) ) a (B ) "a B () a ) CC- is a folding homomorphism to a right folding " xs (C ) "a " xs   xs (C ) "a C ( xs )  l xs (C ) "a C ( l xs )   (C ) xs "a C (   xs) ! l (C ) xs "a C (! l  xs) left' (C ) "a C (left' ) right' (C ) "a C (right' ) dimap l r (C ) "a C (dimap l r ) extract (C ) "a extract  pure a "a C (pure a) C  <*> C  "a C ( <*> )  a "a C ( a) C   C . k "a C (  k) $ p (C ) "a C ($ p ) ) a (C ) "a C () a ) EE. is a scan homomorphism to a semigroup reducerFE' is a scan homomorphism to a right scanAWe can convert from a lazy left folding to a strict left folding.$We can convert a lazy fold to itselfEWe can convert from a strict left folding to a right or monoidal foldCWe can convert from a lazy left folding to a right or monoidal fold8We can convert from a monoidal fold to a lazy right fold8We can convert from a lazy right fold to a monoidal fold=>?@ABCDEF( !"#$%&'()*+,./123456789:;<=>?@ABCDEF(%&'() !"#$*123478;<+,./569:DEF?@ABC=>=>?@ABCDEF   !"#$%&'()*+,-./012334556778899:: ; ; < < = > ? @ A B C D E FGHIGJKGLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwwxyz{|}~ GG folds-0.6.1Data.Fold.InternalData.Fold.Class Data.Fold.L Data.Fold.L' Data.Fold.L1 Data.Fold.L1' Data.Fold.M Data.Fold.M1 Data.Fold.R Data.Fold.R1 Data.FoldTree1Tip1Bin1List1LastCons1BoxAnPair'TreeTwoOneZeroNrunNMaybe'Just'Nothing' SnocList1FirstSnoc1SnocListNilSnocmaybe'FoldingprefixprefixOfpostfix postfixOfrunrunOf filteringScanprefix1postfix1run1 interspersingbeneathLunfoldLL'unfoldL'L1L1'MM1RR1AsL'asL'AsL1'asL1'AsRMasMasRAsRM1asM1asR1base Data.FoldablefoldMap Data.MonoidMonoid Data.MaybeMaybe$fTraversableTree1$fFoldableTree1$fFunctorTree1$fTraversableList1$fFoldableList1$fFunctorList1$fTraversableBox $fFoldableBox $fFunctorBox$fTraversableAn $fFoldableAn $fFunctorAn $fMonoidPair'$fTraversableTree$fFoldableTree $fFunctorTree $fMonoidN$fFoldableMaybe'$fTraversableSnocList1$fFoldableSnocList1$fFunctorSnocList1$fTraversableSnocList$fFoldableSnocList$fFunctorSnocList lens-4.4.0.2Control.Lens.TypePrism $fFoldingL$fComonadApplyL$fApplyL $fExtendL $fMonadZipL$fMonadL$fBindL$fApplicativeL $fComonadL $fFunctorL $fChoiceL $fProfunctorL$fScanL $fFoldingL'Pair$fComonadApplyL' $fApplyL' $fExtendL' $fMonadZipL' $fMonadL'$fBindL'$fApplicativeL' $fComonadL' $fFunctorL' $fChoiceL'$fProfunctorL'$fScanL'walk$fArrowChoiceL1 $fChoiceL1 $fStrongL1$fProfunctorL1 $fArrowL1 $fCategory*L1$fSemigroupoidL1 $fMonadZipL1 $fMonadL1$fApplicativeL1 $fApplyL1 $fPointedL1 $fFunctorL1$fScanL1$fArrowChoiceL1' $fChoiceL1' $fStrongL1'$fProfunctorL1' $fArrowL1'$fCategory*L1'$fSemigroupoidL1' $fMonadL1'$fApplicativeL1' $fApplyL1' $fPointedL1' $fFunctorL1' $fScanL1' $fFoldingM$fComonadApplyM$fApplyM $fExtendM $fMonadZipM$fMonadM$fBindM$fApplicativeM $fComonadM $fFunctorM $fChoiceM $fProfunctorM$fScanM$fArrowChoiceM1 $fChoiceM1 $fStrongM1$fProfunctorM1 $fArrowM1 $fCategory*M1$fSemigroupoidM1 $fMonadZipM1 $fMonadM1$fApplicativeM1 $fApplyM1 $fPointedM1 $fFunctorM1$fScanM1 $fFoldingR$fComonadApplyR$fApplyR $fExtendR$fApplicativeR $fMonadZipR$fMonadR$fBindR $fComonadR $fFunctorR $fChoiceR $fProfunctorR$fScanR$fArrowChoiceR1 $fChoiceR1 $fStrongR1$fProfunctorR1 $fArrowR1 $fCategory*R1$fSemigroupoidR1 $fMonadZipR1 $fMonadR1$fApplicativeR1 $fApplyR1 $fPointedR1 $fFunctorR1$fScanR1GHC.Basereturn>>=$fAsL'L$fAsL'L'$fAsRML'$fAsRML$fAsRMM$fAsRMR $fAsL1'L'$fAsL1'L $fAsL1'L1 $fAsL1'L1' $fAsRM1R1$fAsRM1R $fAsRM1M1$fAsRM1M $fAsRM1L1' $fAsRM1L1 $fAsRM1L'$fAsRM1L