gdexp :: HParser () -> HParser GuardedExpression
gdexp equals = addRange $
    do
        lexBAR
        g <- exp0
        equals
        e <- exp_
        return $ \r -> GuardedExpression_GuardedExpression r g e
        

-- exp_ = addRange (
--    do
--       feedback <- option Nothing (try $ lexFeedback >>= return . Just)
--       e <- expOrg_
--       return (maybe (const e) (\s -> \r -> Expression_Feedback r s e) feedback)
--    ) <?> Texts.parserExpression

{-
exp     ->  exp0 "::" type  (expression type signature)  
         |  exp0  
-}
gdexp :: HParser () -> HParser GuardedExpression
gdexp equals = addRange $
    do
        lexBAR
        g <- exp0
        equals
        e <- exp_
        return $ \r -> GuardedExpression_GuardedExpression r g e
        

-- exp_ = addRange (
--    do
--       feedback <- option Nothing (try $ lexFeedback >>= return . Just)
--       e <- expOrg_
--       return (maybe (const e) (\s -> \r -> Expression_Feedback r s e) feedback)
--    ) <?> Texts.parserExpression

{-
exp     ->  exp0 "::" type  (expression type signature)  
         |  exp0  
-}
gdexp equals = addRange $
    do
        lexBAR
        g <- exp0
        equals
        e <- exp_
        return $ \r -> GuardedExpression_GuardedExpression r g e
        

-- exp_ = addRange (
--    do
--       feedback <- option Nothing (try $ lexFeedback >>= return . Just)
--       e <- expOrg_
--       return (maybe (const e) (\s -> \r -> Expression_Feedback r s e) feedback)
--    ) <?> Texts.parserExpression

{-
exp     ->  exp0 "::" type  (expression type signature)  
         |  exp0  
-}