>>> intercalate u a = Stream.unfoldMany u . Stream.intersperse a >>> intersperse = Stream.intercalate Unfold.identity >>> unwords = Stream.intercalate Unfold.fromList " "
>>> input = Stream.fromList ["abc", "def", "ghi"] >>> Stream.fold Fold.toList $ Stream.intercalate Unfold.fromList " " input "abc def ghi"
>>> intercalateSuffix u a = Stream.unfoldMany u . Stream.intersperseMSuffix a >>> intersperseMSuffix = Stream.intercalateSuffix Unfold.identity >>> unlines = Stream.intercalateSuffix Unfold.fromList "\n"
>>> input = Stream.fromList ["abc", "def", "ghi"] >>> Stream.fold Fold.toList $ Stream.intercalateSuffix Unfold.fromList "\n" input "abc\ndef\nghi\n"
>>> intercalateSuffix = Stream.intercalateSuffix Array.reader
>>> p1 = Parser.takeWhile1 (not . (== '+')) Fold.toList >>> p2 = Parser.satisfy (== '+') >>> p = Parser.deintercalate p1 p2 Fold.toList >>> Stream.parse p $ Stream.fromList "" Right [] >>> Stream.parse p $ Stream.fromList "1" Right [Left "1"] >>> Stream.parse p $ Stream.fromList "1+" Right [Left "1"] >>> Stream.parse p $ Stream.fromList "1+2+3" Right [Left "1",Right '+',Left "2",Right '+',Left "3"]
>>> p1 = Parser.takeWhile1 (not . (== '+')) Fold.toList >>> p2 = Parser.satisfy (== '+') >>> p = Parser.deintercalate1 p1 p2 Fold.toList >>> Stream.parse p $ Stream.fromList "" Left (ParseError "takeWhile1: end of input") >>> Stream.parse p $ Stream.fromList "1" Right [Left "1"] >>> Stream.parse p $ Stream.fromList "1+" Right [Left "1"] >>> Stream.parse p $ Stream.fromList "1+2+3" Right [Left "1",Right '+',Left "2",Right '+',Left "3"]
>>> p1 = Parser.takeWhile1 (not . (== '+')) Fold.toList >>> p2 = Parser.satisfy (== '+') >>> p = Parser.deintercalateAll p1 p2 Fold.toList >>> Stream.parse p $ Stream.fromList "" Right [] >>> Stream.parse p $ Stream.fromList "1" Right [Left "1"] >>> Stream.parse p $ Stream.fromList "1+" Left (ParseError "takeWhile1: end of input") >>> Stream.parse p $ Stream.fromList "1+2+3" Right [Left "1",Right '+',Left "2",Right '+',Left "3"]