parseInvoke :: Parser Exp
parseInvoke = do
  s <- (many (char '_' <|> alphaNum)) `sepBy` (char '.')
  if length s < 2 then
    fail ""
  else do
    let typ = init s
    let mth = last s
    args <- parseArgs
    return $ Invoke (CLRType typ) (CLRMethod mth) args
parseInvoke :: Parser Exp
parseInvoke = do
  s <- (many (char '_' <|> alphaNum)) `sepBy` (char '.')
  if length s < 2 then
    fail ""
  else do
    let typ = init s
    let mth = last s
    args <- parseArgs
    return $ Invoke (CLRType typ) (CLRMethod mth) args
parseInvoke = do
  s <- (many (char '_' <|> alphaNum)) `sepBy` (char '.')
  if length s < 2 then
    fail ""
  else do
    let typ = init s
    let mth = last s
    args <- parseArgs
    return $ Invoke (CLRType typ) (CLRMethod mth) args