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 | e59ba5a70b6d008afae4f9cfaea7e2495a870937 (patch) | |
tree | ab6a330b35d305e3eae9ee431de85c5bf24ce777 /Types/DeferredParse.hs | |
parent | a7f58634b8aebaf653bd59f44abb62ea37e7d5e1 (diff) |
refactor
Diffstat (limited to 'Types/DeferredParse.hs')
-rw-r--r-- | Types/DeferredParse.hs | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/Types/DeferredParse.hs b/Types/DeferredParse.hs new file mode 100644 index 0000000000..2f463de353 --- /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 |