{-# LANGUAGE DeriveFunctor #-}
{-# OPTIONS_HADDOCK show-extensions #-}
module Yi.Keymap.Vim.MatchResult where
import Control.Applicative (Alternative ((<|>), empty))
data MatchResult a = NoMatch
| PartialMatch
| WholeMatch a
deriving a -> MatchResult b -> MatchResult a
(a -> b) -> MatchResult a -> MatchResult b
(forall a b. (a -> b) -> MatchResult a -> MatchResult b)
-> (forall a b. a -> MatchResult b -> MatchResult a)
-> Functor MatchResult
forall a b. a -> MatchResult b -> MatchResult a
forall a b. (a -> b) -> MatchResult a -> MatchResult b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
<$ :: a -> MatchResult b -> MatchResult a
$c<$ :: forall a b. a -> MatchResult b -> MatchResult a
fmap :: (a -> b) -> MatchResult a -> MatchResult b
$cfmap :: forall a b. (a -> b) -> MatchResult a -> MatchResult b
Functor
instance Applicative MatchResult where
pure :: a -> MatchResult a
pure = a -> MatchResult a
forall a. a -> MatchResult a
WholeMatch
WholeMatch a -> b
f <*> :: MatchResult (a -> b) -> MatchResult a -> MatchResult b
<*> WholeMatch a
x = b -> MatchResult b
forall a. a -> MatchResult a
WholeMatch (a -> b
f a
x)
MatchResult (a -> b)
_ <*> MatchResult a
_ = MatchResult b
forall a. MatchResult a
NoMatch
instance Alternative MatchResult where
empty :: MatchResult a
empty = MatchResult a
forall a. MatchResult a
NoMatch
WholeMatch a
x <|> :: MatchResult a -> MatchResult a -> MatchResult a
<|> MatchResult a
_ = a -> MatchResult a
forall a. a -> MatchResult a
WholeMatch a
x
MatchResult a
_ <|> WholeMatch a
x = a -> MatchResult a
forall a. a -> MatchResult a
WholeMatch a
x
MatchResult a
PartialMatch <|> MatchResult a
_ = MatchResult a
forall a. MatchResult a
PartialMatch
MatchResult a
_ <|> MatchResult a
PartialMatch = MatchResult a
forall a. MatchResult a
PartialMatch
MatchResult a
_ <|> MatchResult a
_ = MatchResult a
forall a. MatchResult a
NoMatch
instance Show (MatchResult a) where
show :: MatchResult a -> String
show (WholeMatch a
_) = String
"WholeMatch"
show MatchResult a
PartialMatch = String
"PartialMatch"
show MatchResult a
NoMatch = String
"NoMatch"
matchFromBool :: Bool -> MatchResult ()
matchFromBool :: Bool -> MatchResult ()
matchFromBool Bool
b = if Bool
b then () -> MatchResult ()
forall a. a -> MatchResult a
WholeMatch () else MatchResult ()
forall a. MatchResult a
NoMatch
matchFromMaybe :: Maybe a -> MatchResult a
matchFromMaybe :: Maybe a -> MatchResult a
matchFromMaybe Maybe a
Nothing = MatchResult a
forall a. MatchResult a
NoMatch
matchFromMaybe (Just a
a) = a -> MatchResult a
forall a. a -> MatchResult a
WholeMatch a
a