import Data.List import Control.Applicative eval :: String -> Maybe Int eval str = exec '+' (*) <|> exec '*' (+) <|> (return $ read str) where exec :: Char -> (Int -> Int -> Int) -> Maybe Int exec ch op = do n <- elemIndex ch str let (a, ch:b) = splitAt n str op <$> eval a <*> eval b main = fmap eval getLine >>= \(Just n) -> print n