úÎG÷E*      !"#$%&'()Safe<=DR.Prepend a value to a separated-like structure.5None 9;<=DRCThe isomorphism to a list of pairs of element and separator values.separated # empty[]separated # ('x' +: 6 +: empty) [('x',6)][] ^. separated[][(6, [])] ^. separated[6,[]] @The isomorphism to element values interspersed with a separator.separated1 # (single 6)(6,[])#separated1 # (5 +: 'x' +: single 6) (5,['x',6])(6, empty) ^. separated1[6](5, 'x' +- 6) ^. separated1 [5,'x',6] "A lens on the first element value.single 7 ^. separated1Head7(single x ^. separated1Head == (x :: Int) A lens on the tail.9(d +: e +: single x) ^. separated1Tail == e +: x +: empty One element and one separator. 7 +- "abc" [7,"abc"]7 +: "abc" +: 8 +- "def"[7,"abc",8,"def"]2Zero element values interspersed with one element.single 4[4]#single x ^. separated1Tail == emptyGThe isomorphism that shuffles the elements and separators one position.shift # ([], 6)[6]shift # ([(5, 'x')], 6) [5,'x',6]single 6 ^. shift([],6)(5 +: 'x' +: single 6) ^. shift ([(5,'x')],6)`Append two lists of separated values to produce a list of pairs of separator and element values.single 7 .++. single 'a'[7,'a']a +: single 7 .++. single b [a,7,b]Qa +: (b :: Separated Int Int) == a +: b -- (a +: (b .++. c)) == ((a +: b) .++ c)gAppend element values interspersed with a separator to a list of pairs of separator and element values.empty ++. single 7[7]empty ++. 6 +: 'x' +: single 7 [6,'x',7]%'w' +: empty ++. 6 +: 'x' +: single 7 ['w',6,'x',7]gAppend a list of pairs of separator and element values to element values interspersed with a separator.single 7 .++ empty[7]single 6 .++ 'x' +: 7 +: empty [6,'x',7]%'w' +: single 6 .++ 'x' +: 7 +: empty ['w',6,'x',7].parse (separatedBy (char ',') digit) "test" ""Right []8isLeft (parse (separatedBy (char ',') digit) "test" ",")True0parse (separatedBy (char ',') digit) "test" ",1"Right [',','1']:isLeft (parse (separatedBy (char ',') digit) "test" ",1,")True8parse (separatedBy (char ',') digit) "test" ",1,2,3,4,5"/Right [',','1',',','2',',','3',',','4',',','5']8isLeft (parse (separatedBy1 (char ',') digit) "test" "")True0parse (separatedBy1 (char ',') digit) "test" "," Right [',']:isLeft (parse (separatedBy1 (char ',') digit) "test" ",1")True2parse (separatedBy1 (char ',') digit) "test" ",1,"Right [',','1',',']:parse (separatedBy1 (char ',') digit) "test" ",1,2,3,4,5,"3Right [',','1',',','2',',','3',',','4',',','5',',']¸Applies functions with separator values, using a zipping operation, appending elements. The identity operation is an infinite list of the empty element and the given separator value.G[1,2] +: reverse +: [3,4] +: empty <*> [5,6,7] +: "abc" +: [8] +: empty[[1,2,5,6,7],"cba",[3,4,8]]XApplies functions with separator values, using a zipping operation, appending elements.G[1,2] +: reverse +: [3,4] +: empty <.> [5,6,7] +: "abc" +: [8] +: empty[[1,2,5,6,7],"cba",[3,4,8]] Map across a  Separated1 on the separator values.Kfmap (+1) (set separated1Tail (1 +: 'b' +: 2 +: 'c' +: empty) (single 'a'))['a',2,'b',3,'c'])fmap id (x :: Separated1 Int String) == x fmap (+1) (single x) == single x¸Applies functions with element values, using a zipping operation, appending separators. The identity operation is an infinite list of the empty separator and the given element value.9(empty :: Separated [Int] (String -> [String])) <*> empty[]P[1,2] +: (\s -> [s, reverse s, drop 1 s]) +: empty <*> [3,4,5] +: "abc" +: empty [[1,2,3,4,5],["abc","cba","bc"]] XApplies functions with element values, using a zipping operation, appending separators.9(empty :: Separated [Int] (String -> [String])) <.> empty[]P[1,2] +: (\s -> [s, reverse s, drop 1 s]) +: empty <.> [3,4,5] +: "abc" +: empty [[1,2,3,4,5],["abc","cba","bc"]]! Map across a  Separated on the element values.(fmap id (x :: Separated Int String) == x:\a b -> fmap (+1) (a +: b +: empty) == a +: (1+b) +: empty%:The isomorphism that swaps elements with their separators.swapped # empty[]swapped # ('x' +: 6 +: empty)[6,'x']empty ^. swapped[]('x' +: 6 +: empty) ^. swapped[6,'x']&*+ ,-. !"#$%/  $*+ ,-. !"#$%/ 9 555None 0      !"#$%&'()*+,- ./012&separated-0.1.2-IFA2upg3kSTJrsnDS5Q0zLData.Separated.SeparatedConsData.Separated.SeparatedData.Separated SeparatedConsSeparatedConsFSeparatedConsG+: Separated $fEqSeparated$fOrdSeparated Separated1 separatedempty separated1separated1Headseparated1Tail+-singleshift.++.++..++ separatedBy separatedBy1"$fSeparatedConsSeparatedSeparated1$fApplicativeSeparated1$fShowSeparated1$fApplySeparated1$fFunctorSeparated1$fBifunctorSeparated1"$fSeparatedConsSeparated1Separated$fMonoidSeparated$fSemigroupSeparated$fShowSeparated$fApplicativeSeparated$fApplySeparated$fFunctorSeparated$fBitraversableSeparated$fBifoldableSeparated$fBifunctorSeparated$fSwappedSeparated$fWrappedSeparated$fRewrappedSeparatedt$fEqSeparated1$fOrdSeparated1 showSeparated separatedAp separated1ApD:R:UnwrappedSeparated