While we have some ideas to take Swift 5.7 even further, we need more time to let the details bake. Till then, we can still offer a quality-of-life improvement for folks using Swift 5.7, especially those working on Advent of Code 2022!
Improving Parsing's builder limits
This is perhaps the most notable improvement for now.
Currently, Parsing's builders limits the number of parsers allowed in a block because of how many overloads need to be maintained and generated.
Using Swift 5.7's new buildPartialBlock, we can greatly improve upon this limit:
Builder
Block limit swift(<5.7)
Block limit swift(>=5.7)
OneOfBuilder
10
∞
ParserBuilder
6
10–∞*
* Up to 10 non-Void captures in a block, plus unlimited Void captures.
This should make working with larger builders much easier. The limit of 10 captures is arbitrary and could be expanded. If you hit it, please let us know!
Adding primary associated types
We've added primary associated types to a number of protocols:
Parser<Input, Output>
ParserPrinter<Intput, Output>
Conversion<Input, Output>
PrependableCollection<Element>
This will allow you to express and constrain these protocols in a more lightweight, natural manner.
Formatter parser-printer support
We've added support for using formatters directly in your parser printers with the Formatted parser-printer:
let total = ParsePrint {
"TOTAL: "
Formatted(.currency(code: "USD"))
}
try total.parse("TOTAL: $42.42") // 42.42
try total.print(99.95) // "TOTAL: $99.95"
Formatted takes any of the many formatters shipping in iOS 15 and more recently.
We have more plans for Parsing in the coming months to take even greater advantage of modern Swift features, and we hope to explore them soon!
While we have some ideas to take Swift 5.7 even further, we need more time to let the details bake. Till then, we can still offer a quality-of-life improvement for folks using Swift 5.7, especially those working on Advent of Code 2022!
Improving Parsing's builder limits
This is perhaps the most notable improvement for now.
Currently, Parsing's builders limits the number of parsers allowed in a block because of how many overloads need to be maintained and generated.
Using Swift 5.7's new
buildPartialBlock
, we can greatly improve upon this limit:swift(<5.7)
swift(>=5.7)
OneOfBuilder
ParserBuilder
* Up to 10 non-
Void
captures in a block, plus unlimitedVoid
captures.This should make working with larger builders much easier. The limit of 10 captures is arbitrary and could be expanded. If you hit it, please let us know!
Adding primary associated types
We've added primary associated types to a number of protocols:
Parser<Input, Output>
ParserPrinter<Intput, Output>
Conversion<Input, Output>
PrependableCollection<Element>
This will allow you to express and constrain these protocols in a more lightweight, natural manner.
Formatter parser-printer support
We've added support for using formatters directly in your parser printers with the
Formatted
parser-printer:Formatted
takes any of the many formatters shipping in iOS 15 and more recently.We have more plans for Parsing in the coming months to take even greater advantage of modern Swift features, and we hope to explore them soon!