module Utils where import Control.Monad (forM, forM_) import Data.Traversable (for) import Paths_tttool import Data.Version tttoolVersion :: String tttoolVersion = showVersion version -- Utilities readMaybe :: Read a => String -> Maybe a readMaybe s = case reads s of [(x, "")] -> Just x _ -> Nothing forMn :: Monad m => [a] -> (Int -> a -> m b) -> m [b] forMn l f = forM (zip l [0..]) $ \(x,n) -> f n x forAn :: Applicative m => [a] -> (Int -> a -> m b) -> m [b] forAn l f = for (zip l [0..]) $ \(x,n) -> f n x forMn_ :: Monad m => [a] -> (Int -> a -> m b) -> m () forMn_ l f = forM_ (zip l [0..]) $ \(x,n) -> f n x