definition:
|
constrDecl :: Parser ConstrDecl
constrDecl = (Ident <$> ident *>= decide1) <|> constrDeclOp
where
decide1 :: Ident -> Parser ConstrDecl
--decide1 i = case1 i <|> case2 i
decide1 i = (skipSomeWs *> (case1 i <!> case2 i)) <!> decide2 i []
case1 :: Ident -> Parser ConstrDecl
--case1 i = RecordDecl i <$> (skipSomeWs *> tokenCurlyBracketL *!*> parseList tokenComma fieldDecl <*!* tokenCurlyBracketR)
case1 i = RecordDecl i <$> (tokenCurlyBracketL *!*> parseList tokenComma fieldDecl <*!* tokenCurlyBracketR)
case2 :: Ident -> Parser ConstrDecl
--case2 i = many (skipSomeWs *> typeExpr) *>= decide2 i
case2 i = (:) <$> type2 <*> many (skipSomeWs *> type2) *>= decide2 i
decide2 :: Ident -> [TypeExpr] -> Parser ConstrDecl
decide2 i ts =
(ConOpDecl (foldl1 ApplyType (ConstructorType (identToQualIdent i):ts)) <$> (Ident <$> operator) <*!*> typeExpr) <!>
yield (ConstrDecl i ts)
|
demand:
|
no demanded arguments
|
deterministic:
|
deterministic operation
|
documentation:
|
--- A parser for a Constructor Declaration
-- Constr ::= Ident TypeVariableList
-- | Ident '{' fieldList '}'
-- | TypeExpr Op TypeExpr
|
failfree:
|
<FAILING>
|
indeterministic:
|
referentially transparent operation
|
infix:
|
no fixity defined
|
iotype:
|
{() |-> {<|>._#lambda6}}
|
name:
|
constrDecl
|
precedence:
|
no precedence defined
|
result-values:
|
{<|>._#lambda6}
|
signature:
|
String -> [(CurryInterface.Types.ConstrDecl, String)]
|
solution-complete:
|
operation might suspend on free variables
|
terminating:
|
possibly non-terminating
|
totally-defined:
|
possibly non-reducible on same data term
|