@@ -176,8 +176,12 @@ attributeExtendTupleExpressionP = do
176176 return $ AttributeExtendTupleExpr (T.pack newAttr) atom
177177
178178atomExprP :: Parser AtomExpr
179−atomExprP = try functionAtomExprP <|>
180− try constructedAtomExprP <|>
179+atomExprP = consumeAtomExprP True
180+
181+consumeAtomExprP :: Bool -> Parser AtomExpr
182+consumeAtomExprP consume = try functionAtomExprP <|>
183+ try (parens (constructedAtomExprP True)) <|>
184+ constructedAtomExprP consume <|>
181185 attributeAtomExprP <|>
182186 nakedAtomExprP <|>
183187 relationalAtomExprP
@@ -191,12 +195,12 @@ attributeAtomExprP = do
191195nakedAtomExprP :: Parser AtomExpr
192196nakedAtomExprP = NakedAtomExpr <$> atomP
193197
194−constructedAtomExprP :: Parser AtomExpr
195−constructedAtomExprP = do
196− dConsName <- capitalizedIdentifier
197− dConsArgs <- sepBy atomExprP spaces
198+constructedAtomExprP :: Bool -> Parser AtomExpr
199+constructedAtomExprP consume = do
200+ dConsName <- capitalizedIdentifier
201+ dConsArgs <- if consume then sepBy (consumeAtomExprP False) spaces else pure []
198202 pure $ ConstructedAtomExpr (T.pack dConsName) dConsArgs
199−
203+
200204-- used only for primitive type parsing ?
201205atomP :: Parser Atom
202206atomP = stringAtomP <|>