term :: Stream s m Char => ParsecT s u m (Free ClaGate String)
term =
    parens expr
    <|>
    do { v <- identifier
       ; return $ Pure v
       }
    <|>
    do { n <- natural
       ; case n of
           0 -> return $ Free $ GConst False
           1 -> return $ Free $ GConst True
           _ -> parserZero
       }
    <?> "simple expression"
term :: Stream s m Char => ParsecT s u m (Free ClaGate String)
term =
    parens expr
    <|>
    do { v <- identifier
       ; return $ Pure v
       }
    <|>
    do { n <- natural
       ; case n of
           0 -> return $ Free $ GConst False
           1 -> return $ Free $ GConst True
           _ -> parserZero
       }
    <?> "simple expression"
term =
    parens expr
    <|>
    do { v <- identifier
       ; return $ Pure v
       }
    <|>
    do { n <- natural
       ; case n of
           0 -> return $ Free $ GConst False
           1 -> return $ Free $ GConst True
           _ -> parserZero
       }
    <?> "simple expression"