In pattern matching, we attempt to match values against patterns and, if so desired, bind variables to successful matches.
~ Wikibooks article on Haskell/Pattern matching
This project implements pattern matching in Snap!, using predicates and upvars. Each pattern is implemented as a custom block with upvars, that returns a predicate that takes a value to match against. If the match succeeds, the predicate sets the upvars and reports true. Otherwise, it reports false.
Included patterns are those relating to a type-parameter-less Maybe type (which is used by the pattern matching system to distinguish non-matches from matches with falsy values), lists and list items, along with patterns that allow you to combine other patterns with the equivalent of logical "and".