module Data.Type.Witness.Specific.WitnessMap.Of where
import Data.Type.Witness.Specific.Some
import Data.Type.Witness.Specific.WitnessMap.For
import Import
type WitnessMapOf :: (Type -> Type) -> Type
type WitnessMapOf = WitnessMapFor Identity
emptyWitnessMapOf :: WitnessMapOf w
emptyWitnessMapOf :: forall (w :: Type -> Type). WitnessMapOf w
emptyWitnessMapOf = WitnessMapFor Identity w
forall {k} (f :: k -> Type) (w :: k -> Type). WitnessMapFor f w
emptyWitnessMapFor
witnessMapOfLookup :: TestEquality w => w a -> WitnessMapOf w -> Maybe a
witnessMapOfLookup :: forall (w :: Type -> Type) a.
TestEquality w =>
w a -> WitnessMapOf w -> Maybe a
witnessMapOfLookup w a
wit WitnessMapOf w
d = (Identity a -> a) -> Maybe (Identity a) -> Maybe a
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: Type -> Type) a b. Functor f => (a -> b) -> f a -> f b
fmap Identity a -> a
forall a. Identity a -> a
runIdentity (Maybe (Identity a) -> Maybe a) -> Maybe (Identity a) -> Maybe a
forall a b. (a -> b) -> a -> b
$ w a -> WitnessMapOf w -> Maybe (Identity a)
forall {k} (w :: k -> Type) (a :: k) (f :: k -> Type).
TestEquality w =>
w a -> WitnessMapFor f w -> Maybe (f a)
witnessMapForLookup w a
wit WitnessMapOf w
d
witnessMapOfModify :: TestEquality w => w a -> (a -> a) -> WitnessMapOf w -> WitnessMapOf w
witnessMapOfModify :: forall (w :: Type -> Type) a.
TestEquality w =>
w a -> (a -> a) -> WitnessMapOf w -> WitnessMapOf w
witnessMapOfModify w a
wit a -> a
amap = w a
-> (Identity a -> Identity a)
-> WitnessMapFor Identity w
-> WitnessMapFor Identity w
forall {k} (w :: k -> Type) (a :: k) (f :: k -> Type).
TestEquality w =>
w a -> (f a -> f a) -> WitnessMapFor f w -> WitnessMapFor f w
witnessMapForModify w a
wit (a -> Identity a
forall a. a -> Identity a
Identity (a -> Identity a) -> (Identity a -> a) -> Identity a -> Identity a
forall b c a. (b -> c) -> (a -> b) -> a -> c
forall {k} (cat :: k -> k -> Type) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. a -> a
amap (a -> a) -> (Identity a -> a) -> Identity a -> a
forall b c a. (b -> c) -> (a -> b) -> a -> c
forall {k} (cat :: k -> k -> Type) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Identity a -> a
forall a. Identity a -> a
runIdentity)
witnessMapOfReplace :: TestEquality w => w a -> a -> WitnessMapOf w -> WitnessMapOf w
witnessMapOfReplace :: forall (w :: Type -> Type) a.
TestEquality w =>
w a -> a -> WitnessMapOf w -> WitnessMapOf w
witnessMapOfReplace w a
wit a
newa = w a -> (a -> a) -> WitnessMapOf w -> WitnessMapOf w
forall (w :: Type -> Type) a.
TestEquality w =>
w a -> (a -> a) -> WitnessMapOf w -> WitnessMapOf w
witnessMapOfModify w a
wit ((a -> a) -> WitnessMapOf w -> WitnessMapOf w)
-> (a -> a) -> WitnessMapOf w -> WitnessMapOf w
forall a b. (a -> b) -> a -> b
$ a -> a -> a
forall a b. a -> b -> a
const a
newa
witnessMapOfSingle :: w a -> a -> WitnessMapOf w
witnessMapOfSingle :: forall (w :: Type -> Type) a. w a -> a -> WitnessMapOf w
witnessMapOfSingle w a
wit a
a = w a -> Identity a -> WitnessMapFor Identity w
forall {k} (w :: k -> Type) (a :: k) (f :: k -> Type).
w a -> f a -> WitnessMapFor f w
witnessMapForSingle w a
wit (Identity a -> WitnessMapFor Identity w)
-> Identity a -> WitnessMapFor Identity w
forall a b. (a -> b) -> a -> b
$ a -> Identity a
forall a. a -> Identity a
Identity a
a
witnessMapOfFold :: Monoid m => WitnessMapOf w -> (forall a. w a -> a -> m) -> m
witnessMapOfFold :: forall m (w :: Type -> Type).
Monoid m =>
WitnessMapOf w -> (forall a. w a -> a -> m) -> m
witnessMapOfFold WitnessMapOf w
d forall a. w a -> a -> m
f = WitnessMapOf w -> (forall {a}. w a -> Identity a -> m) -> m
forall {k} m (f :: k -> Type) (w :: k -> Type).
Monoid m =>
WitnessMapFor f w -> (forall (a :: k). w a -> f a -> m) -> m
witnessMapForFold WitnessMapOf w
d ((forall {a}. w a -> Identity a -> m) -> m)
-> (forall {a}. w a -> Identity a -> m) -> m
forall a b. (a -> b) -> a -> b
$ \w a
wa (Identity a
a) -> w a -> a -> m
forall a. w a -> a -> m
f w a
wa a
a
witnessMapOfAdd :: w a -> a -> WitnessMapOf w -> WitnessMapOf w
witnessMapOfAdd :: forall (w :: Type -> Type) a.
w a -> a -> WitnessMapOf w -> WitnessMapOf w
witnessMapOfAdd w a
wit a
a = w a
-> Identity a
-> WitnessMapFor Identity w
-> WitnessMapFor Identity w
forall {k} (w :: k -> Type) (a :: k) (f :: k -> Type).
w a -> f a -> WitnessMapFor f w -> WitnessMapFor f w
witnessMapForAdd w a
wit (Identity a
-> WitnessMapFor Identity w -> WitnessMapFor Identity w)
-> Identity a
-> WitnessMapFor Identity w
-> WitnessMapFor Identity w
forall a b. (a -> b) -> a -> b
$ a -> Identity a
forall a. a -> Identity a
Identity a
a
witnessMapOfRemove :: TestEquality w => w a -> WitnessMapOf w -> WitnessMapOf w
witnessMapOfRemove :: forall (w :: Type -> Type) a.
TestEquality w =>
w a -> WitnessMapOf w -> WitnessMapOf w
witnessMapOfRemove = w a -> WitnessMapFor Identity w -> WitnessMapFor Identity w
forall {k} (w :: k -> Type) (a :: k) (f :: k -> Type).
TestEquality w =>
w a -> WitnessMapFor f w -> WitnessMapFor f w
witnessMapForRemove
witnessMapOfFromList :: [SomeOf w] -> WitnessMapOf w
witnessMapOfFromList :: forall (w :: Type -> Type). [SomeOf w] -> WitnessMapOf w
witnessMapOfFromList = [SomeFor Identity w] -> WitnessMapFor Identity w
forall k (f :: k -> Type) (w :: k -> Type).
[SomeFor f w] -> WitnessMapFor f w
MkWitnessMapFor
witnessMapOfToList :: WitnessMapOf w -> [SomeOf w]
witnessMapOfToList :: forall (w :: Type -> Type). WitnessMapOf w -> [SomeOf w]
witnessMapOfToList = WitnessMapFor Identity w -> [SomeFor Identity w]
forall k (f :: k -> Type) (w :: k -> Type).
WitnessMapFor f w -> [SomeFor f w]
witnessMapForToList