----------------------------------------------------------------------------- -- | -- Module: Data.Pattern -- License: BSD3 -- Maintainer: Brent Yorgey <byorgey@cis.upenn.edu> -- Stability: experimental -- Portability: non-portable (see .cabal) -- -- 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. ----------------------------------------------------------------------------- module Data.Pattern ( module Data.Pattern.Base, module Data.Pattern.Common ) where import Data.Pattern.Base import Data.Pattern.Common