Unlock This Episode
Our Free plan includes 1 subscriber-only episode of your choice, plus weekly updates from our newsletter.
Introduction
Hopefully this is tickling something in the back of your mind because it’s something we devoted 5 entire Point-Free episodes to. We really hammered on the idea of having generic types that are capable of chaining their computations together. We found out that the natural solution to this “chaining” or “sequencing” was none other than flatMap
, which is defined on arrays and optionals in the standard library, but the idea goes far, far beyond just what Swift gives us. So, let’s see what it would look like for our Parser
type.
Subscribe to Point-Free
Access this episode, plus all past and future episodes when you become a subscriber.
Already a subscriber? Log in
Exercises
We have previously devoted 3 entire episodes (part 1, part 2, part 3) to
zip
. In those episodes we showed that those operations are very general, and go far beyond what Swift gives us in the standard library for arrays and optionals.Define
zip
andflatMap
on theParser
type. Start by defining what their signatures should be, and then figure out how to implement them in the simplest way possible. What gotcha to be on the look out for is that you do not want to consume any of the input string if the parser fails.Use the
zip
function defined in the previous exercise to construct aParser<Coordinate>
for parsing strings of the form"40.446° N, 79.982° W"
. You may want to definezip
overloads that work on more than 2 parsers at a time.
References
Combinators
Daniel Steinberg • Friday Sep 14, 2018Daniel gives a wonderful overview of how the idea of “combinators” infiltrates many common programming tasks.
Just as with OO, one of the keys to a functional style of programming is to write very small bits of functionality that can be combined to create powerful results. The glue that combines the small bits are called Combinators. In this talk we’ll motivate the topic with a look at Swift Sets before moving on to infinite sets, random number generators, parser combinators, and Peter Henderson’s Picture Language. Combinators allow you to provide APIs that are friendly to non-functional programmers.
Parser Combinators in Swift
Yasuhiro Inami • Monday May 2, 2016In the first ever try! Swift conference, Yasuhiro Inami gives a broad overview of parsers and parser combinators, and shows how they can accomplish very complex parsing.
Parser combinators are one of the most awesome functional techniques for parsing strings into trees, like constructing JSON. In this talk from try! Swift, Yasuhiro Inami describes how they work by combining small parsers together to form more complex and practical ones.
Learning Parser Combinators With Rust
Bodil Stokke • Thursday Apr 18, 2019A wonderful article that explains parser combinators from start to finish. The article assumes you are already familiar with Rust, but it is possible to look past the syntax and see that there are many shapes in the code that are similar to what we have covered in our episodes on parsers.
Sparse
John Patrick Morgan • Thursday Jan 12, 2017A parser library built in Swift that uses many of the concepts we cover in our series of episodes on parsers.
Sparse is a simple parser-combinator library written in Swift.
parsec
Daan Leijen, Paolo Martini, Antoine LatterParsec is one of the first and most widely used parsing libraries, built in Haskell. It’s built on many of the same ideas we have covered in our series of episodes on parsers, but using some of Haskell’s most powerful type-level features.
Parse, don’t validate
Alexis King • Tuesday Nov 5, 2019This article demonstrates that parsing can be a great alternative to validating. When validating you often check for certain requirements of your values, but don’t have any record of that check in your types. Whereas parsing allows you to upgrade the types to something more restrictive so that you cannot misuse the value later on.
Ledger Mac App: Parsing Techniques
Chris Eidhof & Florian Kugler • Friday Aug 26, 2016In this free episode of Swift talk, Chris and Florian discuss various techniques for parsing strings as a means to process a ledger file. It contains a good overview of various parsing techniques, including parser grammars.