CurryInfo: rw-data-generator-2.0.0 / RW.Build.consToPolyPattern

definition:
consToPolyPattern :: CConsDecl -> CPattern
consToPolyPattern (CCons name _ tes) = CPComb name pats
  where
    pats = map convert tes
    -- Converts a type expression to a pattern such that only type variables are pattern-matched (bound to a variable)
    convert te = case te of
      CTVar (i, n) -> CPVar (i, n ++ "'")
      _            -> anonPattern
    -- Replaces all recurrences of type variables in a list of type expressions with wildcards
    anonDuplicates (x:xs) | x == anonPattern = x : anonDuplicates xs
                          | otherwise        = x : anonDuplicates (substitute x anonPattern xs)
    anonDuplicates []     = []
    -- Replaces all occurrences of a type variable pattern with a wildcard pattern
    substitute v1 v2 = map (\x -> if x == v1 then v2 else x) 
demand:
argument 1
deterministic:
deterministic operation
documentation:
--- Pattern-matches the first occurrence of every type variable in a given type expression. 
---
--- For a specific constructor of a type definition 
---   data T t1 ... tn = ... | C e1 ... em | ...
--- this function generates a pattern
---  C p1 ... pm
--- where pi (1 <= i <= m) is...
---  - a variable ei' if ei the first occurence of a polymorphic type variable t1 ... tn in the constructor
---  - a wildcard _   otherwise
---
--- Example:
---   data T a = C a String a [a]
---   consToPolyPattern C -> C a' _ _ _
failfree:
{CCons}
indeterministic:
referentially transparent operation
infix:
no fixity defined
iotype:
{({CCons}) |-> {CPComb}}
name:
consToPolyPattern
precedence:
no precedence defined
result-values:
{CPComb}
signature:
AbstractCurry.Types.CConsDecl -> AbstractCurry.Types.CPattern
solution-complete:
operation might suspend on free variables
terminating:
yes
totally-defined:
possibly non-reducible on same data term