@@ -65,7 +65,7 @@ tupleAtomExprP = do
6565 atomExpr <- atomExprP
6666 pure $ (attributeName, atomExpr)
6767
68−projectP :: RelationalMarkerExpr a => Parser (RelationalExprBase a -> RelationalExprBase a)
68+projectP :: Parser (RelationalExprBase a -> RelationalExprBase a)
6969projectP = do
7070 attrs <- braces attributeListP
7171 pure $ Project attrs
@@ -77,7 +77,7 @@ renameClauseP = do
7777 newAttr <- identifier
7878 pure $ (oldAttr, newAttr)
7979
80−renameP :: RelationalMarkerExpr a => Parser (RelationalExprBase a -> RelationalExprBase a)
80+renameP :: Parser (RelationalExprBase a -> RelationalExprBase a)
8181renameP = do
8282 reservedOp "rename"
8383 renameList <- braces (sepBy renameClauseP comma)
@@ -96,14 +96,14 @@ groupClauseP = do
9696 newAttrName <- identifier
9797 return $ (attrs, newAttrName)
9898
99−groupP :: RelationalMarkerExpr a => Parser (RelationalExprBase a -> RelationalExprBase a)
99+groupP :: Parser (RelationalExprBase a -> RelationalExprBase a)
100100groupP = do
101101 reservedOp "group"
102102 (groupAttrList, groupAttrName) <- parens groupClauseP
103103 pure $ Group groupAttrList groupAttrName
104104
105105--in "Time and Relational Theory" (2014), Date's Tutorial D grammar for ungroup takes one attribute, while in previous books, it take multiple arguments. Let us assume that nested ungroups are the same as multiple attributes.
106−ungroupP :: RelationalMarkerExpr a => Parser (RelationalExprBase a -> RelationalExprBase a)
106+ungroupP :: Parser (RelationalExprBase a -> RelationalExprBase a)
107107ungroupP = do
108108 reservedOp "ungroup"
109109 rvaAttrName <- identifier
@@ -195,13 +195,13 @@ consumeAtomExprP consume = try functionAtomExprP <|>
195195 nakedAtomExprP <|>
196196 relationalAtomExprP
197197
198−attributeAtomExprP :: RelationalMarkerExpr a => Parser (AtomExprBase a)
198+attributeAtomExprP :: Parser (AtomExprBase a)
199199attributeAtomExprP = do
200200 _ <- string "@"
201201 attrName <- identifier
202202 return $ AttributeAtomExpr attrName
203203
204−nakedAtomExprP :: RelationalMarkerExpr a => Parser (AtomExprBase a)
204+nakedAtomExprP :: Parser (AtomExprBase a)
205205nakedAtomExprP = NakedAtomExpr <$> atomP
206206
207207constructedAtomExprP :: RelationalMarkerExpr a => Bool -> Parser (AtomExprBase a)