module Data.TTask.File.Compatibility ( resolution ) where import Control.Monad.Trans.Either import Control.Monad.IO.Class import Data.TTask.Types.Types import qualified Data.TTask.File.Compatibility.V0_0_1_0 as V0_0_1_0 resolution' :: String -> TryConvert () resolution' s = do liftIO $ putStrLn "That is not latest ttask project file." tryRead "0.0.1.0" s $ V0_0_1_0.readProject liftIO $ putStrLn "... convert failure" tryRead :: String -> String -> (String -> Maybe Project) -> TryConvert () tryRead v s f = tryFromMaybe (successMsg v) $ f s -------- type TryConvert a = EitherT Project IO a runConvert :: TryConvert a -> IO (Either Project a) runConvert = runEitherT -------- resolution :: String -> IO (Maybe Project) resolution s = do e <- runConvert $ resolution' s case e of Right () -> return Nothing Left pj -> return $ Just pj tryFromMaybe :: String -> Maybe Project -> TryConvert () tryFromMaybe msg (Just x) = do liftIO $ putStrLn msg left x tryFromMaybe _ Nothing = return () successMsg :: String -> String successMsg s = concat [ "Success convert from old ttask project file (less than ", s, ")" ]