From cc6775a52107f5425d668a4831f475d05dc113b5 Mon Sep 17 00:00:00 2001 From: Joe Crayne Date: Sat, 13 Jul 2019 17:27:54 -0400 Subject: WIP: encapsulation of KeyDB. --- lib/KeyRing/Types.hs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'lib/KeyRing/Types.hs') diff --git a/lib/KeyRing/Types.hs b/lib/KeyRing/Types.hs index 0797dab..3c1f0a5 100644 --- a/lib/KeyRing/Types.hs +++ b/lib/KeyRing/Types.hs @@ -1,8 +1,10 @@ -{-# LANGUAGE DeriveFunctor #-} -{-# LANGUAGE PatternSynonyms #-} +{-# LANGUAGE DeriveFunctor #-} +{-# LANGUAGE DeriveTraversable #-} +{-# LANGUAGE PatternSynonyms #-} module KeyRing.Types where import Data.Char (isLower,toLower) +import Data.Functor import Data.List (groupBy,find) import Data.Map as Map (Map) import qualified Data.Map as Map @@ -272,7 +274,7 @@ data KikiCondition a = KikiSuccess a | NoWorkingKey | AgentConnectionFailure | OperationCanceled - deriving ( Functor, Show ) + deriving ( Functor, Foldable, Traversable, Show ) instance FunctorToMaybe KikiCondition where functorToMaybe (KikiSuccess a) = Just a @@ -287,6 +289,11 @@ instance Applicative KikiCondition where Left err -> err Left err -> err +instance Monad KikiCondition where + return = pure + KikiSuccess a >>= f = f a + kikiCondition >>= f = kikiCondition <&> error (show (const () <$> kikiCondition) ++ " >>= f") + uncamel :: String -> String uncamel str = unwords $ firstWord ++ (toLower .: otherWords) ++ args where -- cgit v1.2.3