first-class-patterns-0.1.0: First class patterns and pattern matching, using type families

Portabilityportable
Stabilityexperimental
MaintainerReiner Pope <reiner.pope@gmail.com>

Data.Pattern

Description

The main import module for first-class-patterns.

As an example, the following functions, ex1 and ex2 are semantically equivalent:

  ex1, ex2 :: Num a => Either a (a, a) -> a
  ex1 a = match a $ 
            left (cst 4)         ->> 0
        ||| left var             ->> id
        ||| right (tup2 var var) ->> (+)
  ex2 a = case a of
            Left 4      -> 0
            Left x      -> x
            Right (x,y) -> x+y

Also, when optimisation is turned on, GHC will compile them to the same code.

Documentation