diff options
| author | Joey Hess <joeyh@joeyh.name> | 2015-10-23 17:25:31 -0400 |
|---|---|---|
| committer | Joey Hess <joeyh@joeyh.name> | 2015-10-23 17:25:31 -0400 |
| commit | 1cd7f557f0c89714c47855f38583073c313674f2 (patch) | |
| tree | eab23a5274f1d511d4c11fd680da97a34c5c6f85 /src | |
| parent | 3aee86abac10f1ad9d4b51c024f5f3c02cdbfc68 (diff) | |
generalize check
Hmm, do I really need my own type class for LiftPropellor? This seems like
a general problem so I am probably reinventing the wheel.
Diffstat (limited to 'src')
| -rw-r--r-- | src/Propellor/Property.hs | 11 | ||||
| -rw-r--r-- | src/Propellor/Types.hs | 10 |
2 files changed, 16 insertions, 5 deletions
diff --git a/src/Propellor/Property.hs b/src/Propellor/Property.hs index 342db1a5..95805054 100644 --- a/src/Propellor/Property.hs +++ b/src/Propellor/Property.hs @@ -142,11 +142,12 @@ ensureProperty :: Property NoInfo -> Propellor Result ensureProperty = catchPropellor . propertySatisfy -- | Makes a Property only need to do anything when a test succeeds. -check :: IO Bool -> Property i -> Property i -check c p = adjustPropertySatisfy p $ \satisfy -> ifM (liftIO c) - ( satisfy - , return NoChange - ) +check :: (LiftPropellor m) => m Bool -> Property i -> Property i +check c p = adjustPropertySatisfy p $ \satisfy -> + ifM (liftPropellor c) + ( satisfy + , return NoChange + ) -- | Tries the first property, but if it fails to work, instead uses -- the second. diff --git a/src/Propellor/Types.hs b/src/Propellor/Types.hs index fc700df0..5904374e 100644 --- a/src/Propellor/Types.hs +++ b/src/Propellor/Types.hs @@ -29,6 +29,7 @@ module Propellor.Types , CombinedType , combineWith , Propellor(..) + , LiftPropellor(..) , EndAction(..) , module Propellor.Types.OS , module Propellor.Types.Dns @@ -72,6 +73,15 @@ newtype Propellor p = Propellor { runWithHost :: RWST Host [EndAction] () IO p } , MonadMask ) +class LiftPropellor m where + liftPropellor :: m a -> Propellor a + +instance LiftPropellor Propellor where + liftPropellor = id + +instance LiftPropellor IO where + liftPropellor = liftIO + instance Monoid (Propellor Result) where mempty = return NoChange -- | The second action is only run if the first action does not fail. |
