{-# 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 f :: a -> b
f <*> :: MatchResult (a -> b) -> MatchResult a -> MatchResult b
<*> WholeMatch x :: a
x = b -> MatchResult b
forall a. a -> MatchResult a
WholeMatch (a -> b
f a
x)
_ <*> _ = MatchResult b
forall a. MatchResult a
NoMatch
instance Alternative MatchResult where
empty :: MatchResult a
empty = MatchResult a
forall a. MatchResult a
NoMatch
WholeMatch x :: a
x <|> :: MatchResult a -> MatchResult a -> MatchResult a
<|> _ = a -> MatchResult a
forall a. a -> MatchResult a
WholeMatch a
x
_ <|> WholeMatch x :: a
x = a -> MatchResult a
forall a. a -> MatchResult a
WholeMatch a
x
PartialMatch <|> _ = MatchResult a
forall a. MatchResult a
PartialMatch
_ <|> PartialMatch = MatchResult a
forall a. MatchResult a
PartialMatch
_ <|> _ = MatchResult a
forall a. MatchResult a
NoMatch
instance Show (MatchResult a) where
show :: MatchResult a -> String
show (WholeMatch _) = "WholeMatch"
show PartialMatch = "PartialMatch"
show NoMatch = "NoMatch"
matchFromBool :: Bool -> MatchResult ()
matchFromBool :: Bool -> MatchResult ()
matchFromBool b :: 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 Nothing = MatchResult a
forall a. MatchResult a
NoMatch
matchFromMaybe (Just a :: a
a) = a -> MatchResult a
forall a. a -> MatchResult a
WholeMatch a
a