module Text.Regex.Do.Type.MatchHint where

import Text.Regex.Do.Type.Internal


newtype Once a = Once a     -- ^ replace once
        deriving (a -> Once b -> Once a
(a -> b) -> Once a -> Once b
(forall a b. (a -> b) -> Once a -> Once b)
-> (forall a b. a -> Once b -> Once a) -> Functor Once
forall a b. a -> Once b -> Once a
forall a b. (a -> b) -> Once a -> Once b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
<$ :: a -> Once b -> Once a
$c<$ :: forall a b. a -> Once b -> Once a
fmap :: (a -> b) -> Once a -> Once b
$cfmap :: forall a b. (a -> b) -> Once a -> Once b
Functor)

newtype All a = All a        -- ^ replace all
        deriving (a -> All b -> All a
(a -> b) -> All a -> All b
(forall a b. (a -> b) -> All a -> All b)
-> (forall a b. a -> All b -> All a) -> Functor All
forall a b. a -> All b -> All a
forall a b. (a -> b) -> All a -> All b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
<$ :: a -> All b -> All a
$c<$ :: forall a b. a -> All b -> All a
fmap :: (a -> b) -> All a -> All b
$cfmap :: forall a b. (a -> b) -> All a -> All b
Functor)


instance Hint Once where
    unhint :: Once a -> a
unhint (Once a0 :: a
a0) = a
a0
    hint :: a -> Once a
hint = a -> Once a
forall a. a -> Once a
Once

instance Hint All where
    unhint :: All a -> a
unhint (All a0 :: a
a0) = a
a0
    hint :: a -> All a
hint = a -> All a
forall a. a -> All a
All


instance Applicative Once where
    pure :: a -> Once a
pure p0 :: a
p0 = a -> Once a
forall a. a -> Once a
Once a
p0
    <*> :: Once (a -> b) -> Once a -> Once b
(<*>) (Once f0 :: a -> b
f0) (Once a0 :: a
a0) = b -> Once b
forall a. a -> Once a
Once (b -> Once b) -> b -> Once b
forall a b. (a -> b) -> a -> b
$ a -> b
f0 a
a0


instance Applicative All where
    pure :: a -> All a
pure p0 :: a
p0 = a -> All a
forall a. a -> All a
All a
p0
    <*> :: All (a -> b) -> All a -> All b
(<*>) (All f0 :: a -> b
f0) (All a0 :: a
a0) = b -> All b
forall a. a -> All a
All (b -> All b) -> b -> All b
forall a b. (a -> b) -> a -> b
$ a -> b
f0 a
a0