License | BSD3 |
---|---|
Maintainer | Brent Yorgey <byorgey@cis.upenn.edu> |
Stability | experimental |
Portability | non-portable (see .cabal) |
Safe Haskell | None |
Language | Haskell2010 |
The main module for first-class-patterns; to use the library it should suffice to import this module. For a quick start using the library, see the examples below.
If you want to read further, start with Data.Pattern.Base, which defines the basic pattern type and some basic combinators. Then read Data.Pattern.Common, which defines a number of convenient combinators for constructing various sorts of 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.
XXX add more examples here.