diff options
author | Joey Hess <joeyh@joeyh.name> | 2015-07-09 16:20:30 -0400 |
---|---|---|
committer | Joey Hess <joeyh@joeyh.name> | 2015-07-09 16:20:30 -0400 |
commit | 7a5aff2c121f4ecbc173e939b0cf7b2975d18438 (patch) | |
tree | b221d9a1c8093e2a97a1c5ccb623a704aabd94b5 | |
parent | 525e04af35bb588b4f8a8721cfa77b2b285ac914 (diff) |
refactor
-rw-r--r-- | CmdLine/GitAnnex/Options.hs | 23 | ||||
-rw-r--r-- | Command.hs | 1 | ||||
-rw-r--r-- | Types/DeferredParse.hs | 33 |
3 files changed, 35 insertions, 22 deletions
diff --git a/CmdLine/GitAnnex/Options.hs b/CmdLine/GitAnnex/Options.hs index fb1b81acf..c027c602c 100644 --- a/CmdLine/GitAnnex/Options.hs +++ b/CmdLine/GitAnnex/Options.hs @@ -5,8 +5,6 @@ - Licensed under the GNU GPL version 3 or higher. -} -{-# LANGUAGE FlexibleInstances #-} - module CmdLine.GitAnnex.Options where import System.Console.GetOpt @@ -20,6 +18,7 @@ import Types.NumCopies import Types.Messages import Types.Key import Types.Command +import Types.DeferredParse import qualified Annex import qualified Remote import qualified Limit @@ -56,26 +55,6 @@ gitAnnexOptions = commonOptions ++ >>= pure . (\r -> r { gitGlobalOpts = gitGlobalOpts r ++ [Param "-c", Param v] }) >>= Annex.changeGitRepo --- Some values cannot be fully parsed without performing an action. --- The action may be expensive, so it's best to call finishParse on such a --- value before using getParsed repeatedly. -data DeferredParse a = DeferredParse (Annex a) | ReadyParse a - -class DeferredParseClass a where - finishParse :: a -> Annex a - -getParsed :: DeferredParse a -> Annex a -getParsed (DeferredParse a) = a -getParsed (ReadyParse a) = pure a - -instance DeferredParseClass (DeferredParse a) where - finishParse (DeferredParse a) = ReadyParse <$> a - finishParse (ReadyParse a) = pure (ReadyParse a) - -instance DeferredParseClass (Maybe (DeferredParse a)) where - finishParse Nothing = pure Nothing - finishParse (Just v) = Just <$> finishParse v - parseRemoteOption :: Parser RemoteName -> Parser (DeferredParse Remote) parseRemoteOption p = DeferredParse . (fromJust <$$> Remote.byNameWithUUID) . Just <$> p diff --git a/Command.hs b/Command.hs index df72ad2a7..019a657aa 100644 --- a/Command.hs +++ b/Command.hs @@ -27,6 +27,7 @@ import qualified Backend import qualified Git import Types.Command as ReExported import Types.Option as ReExported +import Types.DeferredParse as ReExported import CmdLine.Seek as ReExported import Checks as ReExported import CmdLine.Usage as ReExported diff --git a/Types/DeferredParse.hs b/Types/DeferredParse.hs new file mode 100644 index 000000000..2f463de35 --- /dev/null +++ b/Types/DeferredParse.hs @@ -0,0 +1,33 @@ +{- git-annex deferred parse values + - + - Copyright 2015 Joey Hess <id@joeyh.name> + - + - Licensed under the GNU GPL version 3 or higher. + -} + +{-# LANGUAGE FlexibleInstances #-} + +module Types.DeferredParse where + +import Annex +import Common + +-- Some values cannot be fully parsed without performing an action. +-- The action may be expensive, so it's best to call finishParse on such a +-- value before using getParsed repeatedly. +data DeferredParse a = DeferredParse (Annex a) | ReadyParse a + +class DeferredParseClass a where + finishParse :: a -> Annex a + +getParsed :: DeferredParse a -> Annex a +getParsed (DeferredParse a) = a +getParsed (ReadyParse a) = pure a + +instance DeferredParseClass (DeferredParse a) where + finishParse (DeferredParse a) = ReadyParse <$> a + finishParse (ReadyParse a) = pure (ReadyParse a) + +instance DeferredParseClass (Maybe (DeferredParse a)) where + finishParse Nothing = pure Nothing + finishParse (Just v) = Just <$> finishParse v |