úÎ> 9Ë/      !"#$%&'()*+,-.portable experimental#Reiner Pope <reiner.pope@gmail.com>#Concatenation of lists. Instances: $ type instance Nil :++: xs = xs 2 type instance (h:*:t) :++: xs = h :*: (t :++: xs)(:*:) corresponds to cons. The type of empty lists portable experimental#Reiner Pope <reiner.pope@gmail.com>/0123456789:;<=>The API presented by !Data.Pattern.Base.Difference.GADT and  #Data.Pattern.Base.Difference.Coerce. An instance of > is a = type which converts an inductively-defined type to one with  an efficient append operation. ?constructs the empty d t. @ appends two d ts. Agiven a "cons"% operation, constructs the singleton d t. Bgiven a "nil" value, "runs" the d t. CDE<>?@AB<>?@AB?@ABportable experimental#Reiner Pope <reiner.pope@gmail.com> Tuples with types given by xs. FGHICurried functions. We have EFun (x1 :*: x2 :*: ... :*: xn :*: Nil) r ~ x1 -> x2 -> ... -> xn -> rThe empty tuple The singleton tuple Concatenation of tuples. +Runs a tuple by applying it to a function. portable experimental#Reiner Pope <reiner.pope@gmail.com> 8Pattern-match clauses. Typically something of the form  pattern  function&Three primitives on them are exposed: (), (),  and !, plus one convenience function: . JK The pattern type. A Pattern vars a is a pattern which matches  against a8s and binds variables with types given by the type-list  vars. :Although this is the basic type used by patterns, many of $ pattern combinators (for instance, Data.Pattern.Base.Common.left) 2 have types better expressed by the type synonyms , ,   , etc,  $, so that nesting of patterns (e.g.  left (tup2  var var)+) can be written as function application. Most "normal"3 pattern matchers (in fact, all of the matchers in  Data.Pattern.Common except var and (/)) can be conveniently  defined using mk0, mk1, etc, mk5.  Constructs a  . Alternative clauses: p ||| q is the clause which first  attempts p , and then q if p fails. "Runs" a  .  #match a c = fromJust (tryMatch a c)   portable experimental#Reiner Pope <reiner.pope@gmail.com>"Variable patterns"6: always succeeds, and binds the value to a variable. "Wildcard patterns"9: always succeeds. (This is written as two underscores.) " And patterns"*. Succeeds only if both patterns succeed. (/\) = % (a -> (a,a))" Or patterns"1. If first pattern fails, then tries the second.  Matches the L of an M.  Matches the N of an M. " View patterns": do some computation, # then pattern match on the result. "Partial view patterns". Synonym for $. "Predicate pattern". # but with O instead of P ().  Succeeds if function yields Q, fails otherwise. Can be used with ()* for some uses similar to pattern guards:  match a $  left (var /\ is even) ->> id ( ||| left __ ->> const 0 ' ||| right __ ->> const 1 "Constant patterns",: tests for equality to the given constant.  cst x = is (==x) !"R"Failure pattern": never succeeds. #$%&'()"0-tuple pattern". A strict match on the (). *"1-tuple pattern". Rather useless. +"2-tuple pattern" ,"3-tuple pattern" -"4-tuple pattern" ."5-tuple pattern"  !"#$%&'()*+,-. #$%&'()*+,-.!" !"#$%&'()*+,-.portable experimental#Reiner Pope <reiner.pope@gmail.com>/  !"#$%&'()*+,-.S      !"#$%&'()*+,-./012345566789:;<==>??@ABCDEFG HHIJKLMKLNKLOPQRKSTPQUVWfirst-class-patterns-0.1.0Data.Pattern.Base.TypeListData.Pattern.Base.TupleData.Pattern.BaseData.Pattern.CommonData.Pattern.Base.Difference Data.Pattern:++::*:NilTupleFunzeroone<>runTupleClausePat5Pat4Pat3Pat2Pat1Pat0Pattern runPattern->>|||tryMatchmatchvar__/\\/leftrightviewtryViewiscstnilconsmk0mk1mk2mk3mk4mk5tup0tup1tup2tup3tup4tup5CoerceDListD:==:EqualListclosureassoc rightIdentGadtDProxyD DifferencezeroDplusDmkOneDevalDproxyassoc2 rightIdent2Tuple' runTuple' runClausebase Data.EitherLeftEitherRightghc-primGHC.BoolBool Data.MaybeMaybeTruefail