31 lines
767 B
Haskell
31 lines
767 B
Haskell
import Text.Read (readMaybe)
|
|
import Data.Maybe (mapMaybe)
|
|
|
|
succString :: Bool -> String -> String
|
|
succString pruned s =
|
|
let succs
|
|
:: (Num a, Show a)
|
|
=> a -> Maybe String
|
|
succs = Just . show . (1 +)
|
|
go w
|
|
| elem '.' w = (readMaybe w :: Maybe Double) >>= succs
|
|
| otherwise = (readMaybe w :: Maybe Integer) >>= succs
|
|
opt w
|
|
| pruned = Nothing
|
|
| otherwise = Just w
|
|
in unwords $
|
|
mapMaybe
|
|
(\w ->
|
|
case go w of
|
|
Just s -> Just s
|
|
_ -> opt w)
|
|
(words s)
|
|
|
|
|
|
-- TEST ---------------------------------------------------
|
|
main :: IO ()
|
|
main =
|
|
(putStrLn . unlines) $
|
|
succString <$> [True, False] <*>
|
|
pure "41.0 pine martens in 1491 -1.5 mushrooms ≠ 136"
|