{-# LANGUAGE GeneralizedNewtypeDeriving #-}
module XMonad.Util.Invisible (
Invisible (..)
, whenIJust
, fromIMaybe
) where
import Control.Monad.Fail
newtype Invisible m a = I (m a) deriving (Applicative (Invisible m)
a -> Invisible m a
Applicative (Invisible m)
-> (forall a b.
Invisible m a -> (a -> Invisible m b) -> Invisible m b)
-> (forall a b. Invisible m a -> Invisible m b -> Invisible m b)
-> (forall a. a -> Invisible m a)
-> Monad (Invisible m)
Invisible m a -> (a -> Invisible m b) -> Invisible m b
Invisible m a -> Invisible m b -> Invisible m b
forall a. a -> Invisible m a
forall a b. Invisible m a -> Invisible m b -> Invisible m b
forall a b. Invisible m a -> (a -> Invisible m b) -> Invisible m b
forall (m :: * -> *). Monad m => Applicative (Invisible m)
forall (m :: * -> *) a. Monad m => a -> Invisible m a
forall (m :: * -> *) a b.
Monad m =>
Invisible m a -> Invisible m b -> Invisible m b
forall (m :: * -> *) a b.
Monad m =>
Invisible m a -> (a -> Invisible m b) -> Invisible m b
forall (m :: * -> *).
Applicative m
-> (forall a b. m a -> (a -> m b) -> m b)
-> (forall a b. m a -> m b -> m b)
-> (forall a. a -> m a)
-> Monad m
return :: a -> Invisible m a
$creturn :: forall (m :: * -> *) a. Monad m => a -> Invisible m a
>> :: Invisible m a -> Invisible m b -> Invisible m b
$c>> :: forall (m :: * -> *) a b.
Monad m =>
Invisible m a -> Invisible m b -> Invisible m b
>>= :: Invisible m a -> (a -> Invisible m b) -> Invisible m b
$c>>= :: forall (m :: * -> *) a b.
Monad m =>
Invisible m a -> (a -> Invisible m b) -> Invisible m b
$cp1Monad :: forall (m :: * -> *). Monad m => Applicative (Invisible m)
Monad, Monad (Invisible m)
Monad (Invisible m)
-> (forall a. String -> Invisible m a) -> MonadFail (Invisible m)
String -> Invisible m a
forall a. String -> Invisible m a
forall (m :: * -> *).
Monad m -> (forall a. String -> m a) -> MonadFail m
forall (m :: * -> *). MonadFail m => Monad (Invisible m)
forall (m :: * -> *) a. MonadFail m => String -> Invisible m a
fail :: String -> Invisible m a
$cfail :: forall (m :: * -> *) a. MonadFail m => String -> Invisible m a
$cp1MonadFail :: forall (m :: * -> *). MonadFail m => Monad (Invisible m)
MonadFail, Functor (Invisible m)
a -> Invisible m a
Functor (Invisible m)
-> (forall a. a -> Invisible m a)
-> (forall a b.
Invisible m (a -> b) -> Invisible m a -> Invisible m b)
-> (forall a b c.
(a -> b -> c) -> Invisible m a -> Invisible m b -> Invisible m c)
-> (forall a b. Invisible m a -> Invisible m b -> Invisible m b)
-> (forall a b. Invisible m a -> Invisible m b -> Invisible m a)
-> Applicative (Invisible m)
Invisible m a -> Invisible m b -> Invisible m b
Invisible m a -> Invisible m b -> Invisible m a
Invisible m (a -> b) -> Invisible m a -> Invisible m b
(a -> b -> c) -> Invisible m a -> Invisible m b -> Invisible m c
forall a. a -> Invisible m a
forall a b. Invisible m a -> Invisible m b -> Invisible m a
forall a b. Invisible m a -> Invisible m b -> Invisible m b
forall a b. Invisible m (a -> b) -> Invisible m a -> Invisible m b
forall a b c.
(a -> b -> c) -> Invisible m a -> Invisible m b -> Invisible m c
forall (f :: * -> *).
Functor f
-> (forall a. a -> f a)
-> (forall a b. f (a -> b) -> f a -> f b)
-> (forall a b c. (a -> b -> c) -> f a -> f b -> f c)
-> (forall a b. f a -> f b -> f b)
-> (forall a b. f a -> f b -> f a)
-> Applicative f
forall (m :: * -> *). Applicative m => Functor (Invisible m)
forall (m :: * -> *) a. Applicative m => a -> Invisible m a
forall (m :: * -> *) a b.
Applicative m =>
Invisible m a -> Invisible m b -> Invisible m a
forall (m :: * -> *) a b.
Applicative m =>
Invisible m a -> Invisible m b -> Invisible m b
forall (m :: * -> *) a b.
Applicative m =>
Invisible m (a -> b) -> Invisible m a -> Invisible m b
forall (m :: * -> *) a b c.
Applicative m =>
(a -> b -> c) -> Invisible m a -> Invisible m b -> Invisible m c
<* :: Invisible m a -> Invisible m b -> Invisible m a
$c<* :: forall (m :: * -> *) a b.
Applicative m =>
Invisible m a -> Invisible m b -> Invisible m a
*> :: Invisible m a -> Invisible m b -> Invisible m b
$c*> :: forall (m :: * -> *) a b.
Applicative m =>
Invisible m a -> Invisible m b -> Invisible m b
liftA2 :: (a -> b -> c) -> Invisible m a -> Invisible m b -> Invisible m c
$cliftA2 :: forall (m :: * -> *) a b c.
Applicative m =>
(a -> b -> c) -> Invisible m a -> Invisible m b -> Invisible m c
<*> :: Invisible m (a -> b) -> Invisible m a -> Invisible m b
$c<*> :: forall (m :: * -> *) a b.
Applicative m =>
Invisible m (a -> b) -> Invisible m a -> Invisible m b
pure :: a -> Invisible m a
$cpure :: forall (m :: * -> *) a. Applicative m => a -> Invisible m a
$cp1Applicative :: forall (m :: * -> *). Applicative m => Functor (Invisible m)
Applicative, a -> Invisible m b -> Invisible m a
(a -> b) -> Invisible m a -> Invisible m b
(forall a b. (a -> b) -> Invisible m a -> Invisible m b)
-> (forall a b. a -> Invisible m b -> Invisible m a)
-> Functor (Invisible m)
forall a b. a -> Invisible m b -> Invisible m a
forall a b. (a -> b) -> Invisible m a -> Invisible m b
forall (m :: * -> *) a b.
Functor m =>
a -> Invisible m b -> Invisible m a
forall (m :: * -> *) a b.
Functor m =>
(a -> b) -> Invisible m a -> Invisible m b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
<$ :: a -> Invisible m b -> Invisible m a
$c<$ :: forall (m :: * -> *) a b.
Functor m =>
a -> Invisible m b -> Invisible m a
fmap :: (a -> b) -> Invisible m a -> Invisible m b
$cfmap :: forall (m :: * -> *) a b.
Functor m =>
(a -> b) -> Invisible m a -> Invisible m b
Functor)
instance (Functor m, Monad m, MonadFail m) => Read (Invisible m a) where
readsPrec :: Int -> ReadS (Invisible m a)
readsPrec Int
_ String
s = [(String -> Invisible m a
forall (m :: * -> *) a. MonadFail m => String -> m a
Control.Monad.Fail.fail String
"Read Invisible", String
s)]
instance Monad m => Show (Invisible m a) where
show :: Invisible m a -> String
show Invisible m a
_ = String
""
whenIJust :: (Monad m) => Invisible Maybe a -> (a -> m ()) -> m ()
whenIJust :: Invisible Maybe a -> (a -> m ()) -> m ()
whenIJust (I (Just a
x)) a -> m ()
f = a -> m ()
f a
x
whenIJust (I Maybe a
Nothing) a -> m ()
_ = () -> m ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
fromIMaybe :: a -> Invisible Maybe a -> a
fromIMaybe :: a -> Invisible Maybe a -> a
fromIMaybe a
_ (I (Just a
x)) = a
x
fromIMaybe a
a (I Maybe a
Nothing) = a
a