proofArg :: (Bool -> Int -> Name -> Command) -> String -> IP.IdrisParser (Either String Command)
proofArg cmd name = do
    upd <- P.option False $ do
        IP.lchar '!'
        return True
    l <- IP.natural
    n <- IP.name
    return (Right (cmd upd (fromInteger l) n))
proofArg :: (Bool -> Int -> Name -> Command) -> String -> IP.IdrisParser (Either String Command)
proofArg cmd name = do
    upd <- P.option False $ do
        IP.lchar '!'
        return True
    l <- IP.natural
    n <- IP.name
    return (Right (cmd upd (fromInteger l) n))
proofArg cmd name = do
    upd <- P.option False $ do
        IP.lchar '!'
        return True
    l <- IP.natural
    n <- IP.name
    return (Right (cmd upd (fromInteger l) n))