module Data.Effect.Tag where
import Data.Effect (Effect, FirstOrder, LabelOf, OrderOf)
import Data.Effect.HFunctor (HFunctor)
import Data.Kind (Type)
newtype Tagged tag (e :: Effect) f a = Tag {forall {k} (tag :: k) (e :: Effect) (f :: * -> *) a.
Tagged tag e f a -> e f a
unTag :: e f a}
deriving stock ((forall a b. (a -> b) -> Tagged tag e f a -> Tagged tag e f b)
-> (forall a b. a -> Tagged tag e f b -> Tagged tag e f a)
-> Functor (Tagged tag e f)
forall k (tag :: k) (e :: Effect) (f :: * -> *) a b.
Functor (e f) =>
a -> Tagged tag e f b -> Tagged tag e f a
forall k (tag :: k) (e :: Effect) (f :: * -> *) a b.
Functor (e f) =>
(a -> b) -> Tagged tag e f a -> Tagged tag e f b
forall a b. a -> Tagged tag e f b -> Tagged tag e f a
forall a b. (a -> b) -> Tagged tag e f a -> Tagged tag e f b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
$cfmap :: forall k (tag :: k) (e :: Effect) (f :: * -> *) a b.
Functor (e f) =>
(a -> b) -> Tagged tag e f a -> Tagged tag e f b
fmap :: forall a b. (a -> b) -> Tagged tag e f a -> Tagged tag e f b
$c<$ :: forall k (tag :: k) (e :: Effect) (f :: * -> *) a b.
Functor (e f) =>
a -> Tagged tag e f b -> Tagged tag e f a
<$ :: forall a b. a -> Tagged tag e f b -> Tagged tag e f a
Functor, (forall m. Monoid m => Tagged tag e f m -> m)
-> (forall m a. Monoid m => (a -> m) -> Tagged tag e f a -> m)
-> (forall m a. Monoid m => (a -> m) -> Tagged tag e f a -> m)
-> (forall a b. (a -> b -> b) -> b -> Tagged tag e f a -> b)
-> (forall a b. (a -> b -> b) -> b -> Tagged tag e f a -> b)
-> (forall b a. (b -> a -> b) -> b -> Tagged tag e f a -> b)
-> (forall b a. (b -> a -> b) -> b -> Tagged tag e f a -> b)
-> (forall a. (a -> a -> a) -> Tagged tag e f a -> a)
-> (forall a. (a -> a -> a) -> Tagged tag e f a -> a)
-> (forall a. Tagged tag e f a -> [a])
-> (forall a. Tagged tag e f a -> Bool)
-> (forall a. Tagged tag e f a -> Int)
-> (forall a. Eq a => a -> Tagged tag e f a -> Bool)
-> (forall a. Ord a => Tagged tag e f a -> a)
-> (forall a. Ord a => Tagged tag e f a -> a)
-> (forall a. Num a => Tagged tag e f a -> a)
-> (forall a. Num a => Tagged tag e f a -> a)
-> Foldable (Tagged tag e f)
forall a. Eq a => a -> Tagged tag e f a -> Bool
forall a. Num a => Tagged tag e f a -> a
forall a. Ord a => Tagged tag e f a -> a
forall m. Monoid m => Tagged tag e f m -> m
forall a. Tagged tag e f a -> Bool
forall a. Tagged tag e f a -> Int
forall a. Tagged tag e f a -> [a]
forall a. (a -> a -> a) -> Tagged tag e f a -> a
forall k (tag :: k) (e :: Effect) (f :: * -> *) a.
(Foldable (e f), Eq a) =>
a -> Tagged tag e f a -> Bool
forall k (tag :: k) (e :: Effect) (f :: * -> *) a.
(Foldable (e f), Num a) =>
Tagged tag e f a -> a
forall k (tag :: k) (e :: Effect) (f :: * -> *) a.
(Foldable (e f), Ord a) =>
Tagged tag e f a -> a
forall k (tag :: k) (e :: Effect) (f :: * -> *) m.
(Foldable (e f), Monoid m) =>
Tagged tag e f m -> m
forall k (tag :: k) (e :: Effect) (f :: * -> *) a.
Foldable (e f) =>
Tagged tag e f a -> Bool
forall k (tag :: k) (e :: Effect) (f :: * -> *) a.
Foldable (e f) =>
Tagged tag e f a -> Int
forall k (tag :: k) (e :: Effect) (f :: * -> *) a.
Foldable (e f) =>
Tagged tag e f a -> [a]
forall k (tag :: k) (e :: Effect) (f :: * -> *) a.
Foldable (e f) =>
(a -> a -> a) -> Tagged tag e f a -> a
forall k (tag :: k) (e :: Effect) (f :: * -> *) m a.
(Foldable (e f), Monoid m) =>
(a -> m) -> Tagged tag e f a -> m
forall k (tag :: k) (e :: Effect) (f :: * -> *) b a.
Foldable (e f) =>
(b -> a -> b) -> b -> Tagged tag e f a -> b
forall k (tag :: k) (e :: Effect) (f :: * -> *) a b.
Foldable (e f) =>
(a -> b -> b) -> b -> Tagged tag e f a -> b
forall m a. Monoid m => (a -> m) -> Tagged tag e f a -> m
forall b a. (b -> a -> b) -> b -> Tagged tag e f a -> b
forall a b. (a -> b -> b) -> b -> Tagged tag e f a -> b
forall (t :: * -> *).
(forall m. Monoid m => t m -> m)
-> (forall m a. Monoid m => (a -> m) -> t a -> m)
-> (forall m a. Monoid m => (a -> m) -> t a -> m)
-> (forall a b. (a -> b -> b) -> b -> t a -> b)
-> (forall a b. (a -> b -> b) -> b -> t a -> b)
-> (forall b a. (b -> a -> b) -> b -> t a -> b)
-> (forall b a. (b -> a -> b) -> b -> t a -> b)
-> (forall a. (a -> a -> a) -> t a -> a)
-> (forall a. (a -> a -> a) -> t a -> a)
-> (forall a. t a -> [a])
-> (forall a. t a -> Bool)
-> (forall a. t a -> Int)
-> (forall a. Eq a => a -> t a -> Bool)
-> (forall a. Ord a => t a -> a)
-> (forall a. Ord a => t a -> a)
-> (forall a. Num a => t a -> a)
-> (forall a. Num a => t a -> a)
-> Foldable t
$cfold :: forall k (tag :: k) (e :: Effect) (f :: * -> *) m.
(Foldable (e f), Monoid m) =>
Tagged tag e f m -> m
fold :: forall m. Monoid m => Tagged tag e f m -> m
$cfoldMap :: forall k (tag :: k) (e :: Effect) (f :: * -> *) m a.
(Foldable (e f), Monoid m) =>
(a -> m) -> Tagged tag e f a -> m
foldMap :: forall m a. Monoid m => (a -> m) -> Tagged tag e f a -> m
$cfoldMap' :: forall k (tag :: k) (e :: Effect) (f :: * -> *) m a.
(Foldable (e f), Monoid m) =>
(a -> m) -> Tagged tag e f a -> m
foldMap' :: forall m a. Monoid m => (a -> m) -> Tagged tag e f a -> m
$cfoldr :: forall k (tag :: k) (e :: Effect) (f :: * -> *) a b.
Foldable (e f) =>
(a -> b -> b) -> b -> Tagged tag e f a -> b
foldr :: forall a b. (a -> b -> b) -> b -> Tagged tag e f a -> b
$cfoldr' :: forall k (tag :: k) (e :: Effect) (f :: * -> *) a b.
Foldable (e f) =>
(a -> b -> b) -> b -> Tagged tag e f a -> b
foldr' :: forall a b. (a -> b -> b) -> b -> Tagged tag e f a -> b
$cfoldl :: forall k (tag :: k) (e :: Effect) (f :: * -> *) b a.
Foldable (e f) =>
(b -> a -> b) -> b -> Tagged tag e f a -> b
foldl :: forall b a. (b -> a -> b) -> b -> Tagged tag e f a -> b
$cfoldl' :: forall k (tag :: k) (e :: Effect) (f :: * -> *) b a.
Foldable (e f) =>
(b -> a -> b) -> b -> Tagged tag e f a -> b
foldl' :: forall b a. (b -> a -> b) -> b -> Tagged tag e f a -> b
$cfoldr1 :: forall k (tag :: k) (e :: Effect) (f :: * -> *) a.
Foldable (e f) =>
(a -> a -> a) -> Tagged tag e f a -> a
foldr1 :: forall a. (a -> a -> a) -> Tagged tag e f a -> a
$cfoldl1 :: forall k (tag :: k) (e :: Effect) (f :: * -> *) a.
Foldable (e f) =>
(a -> a -> a) -> Tagged tag e f a -> a
foldl1 :: forall a. (a -> a -> a) -> Tagged tag e f a -> a
$ctoList :: forall k (tag :: k) (e :: Effect) (f :: * -> *) a.
Foldable (e f) =>
Tagged tag e f a -> [a]
toList :: forall a. Tagged tag e f a -> [a]
$cnull :: forall k (tag :: k) (e :: Effect) (f :: * -> *) a.
Foldable (e f) =>
Tagged tag e f a -> Bool
null :: forall a. Tagged tag e f a -> Bool
$clength :: forall k (tag :: k) (e :: Effect) (f :: * -> *) a.
Foldable (e f) =>
Tagged tag e f a -> Int
length :: forall a. Tagged tag e f a -> Int
$celem :: forall k (tag :: k) (e :: Effect) (f :: * -> *) a.
(Foldable (e f), Eq a) =>
a -> Tagged tag e f a -> Bool
elem :: forall a. Eq a => a -> Tagged tag e f a -> Bool
$cmaximum :: forall k (tag :: k) (e :: Effect) (f :: * -> *) a.
(Foldable (e f), Ord a) =>
Tagged tag e f a -> a
maximum :: forall a. Ord a => Tagged tag e f a -> a
$cminimum :: forall k (tag :: k) (e :: Effect) (f :: * -> *) a.
(Foldable (e f), Ord a) =>
Tagged tag e f a -> a
minimum :: forall a. Ord a => Tagged tag e f a -> a
$csum :: forall k (tag :: k) (e :: Effect) (f :: * -> *) a.
(Foldable (e f), Num a) =>
Tagged tag e f a -> a
sum :: forall a. Num a => Tagged tag e f a -> a
$cproduct :: forall k (tag :: k) (e :: Effect) (f :: * -> *) a.
(Foldable (e f), Num a) =>
Tagged tag e f a -> a
product :: forall a. Num a => Tagged tag e f a -> a
Foldable, Functor (Tagged tag e f)
Foldable (Tagged tag e f)
(Functor (Tagged tag e f), Foldable (Tagged tag e f)) =>
(forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> Tagged tag e f a -> f (Tagged tag e f b))
-> (forall (f :: * -> *) a.
Applicative f =>
Tagged tag e f (f a) -> f (Tagged tag e f a))
-> (forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> Tagged tag e f a -> m (Tagged tag e f b))
-> (forall (m :: * -> *) a.
Monad m =>
Tagged tag e f (m a) -> m (Tagged tag e f a))
-> Traversable (Tagged tag e f)
forall k (tag :: k) (e :: Effect) (f :: * -> *).
Traversable (e f) =>
Functor (Tagged tag e f)
forall k (tag :: k) (e :: Effect) (f :: * -> *).
Traversable (e f) =>
Foldable (Tagged tag e f)
forall k (tag :: k) (e :: Effect) (f :: * -> *) (m :: * -> *) a.
(Traversable (e f), Monad m) =>
Tagged tag e f (m a) -> m (Tagged tag e f a)
forall k (tag :: k) (e :: Effect) (f :: * -> *) (f :: * -> *) a.
(Traversable (e f), Applicative f) =>
Tagged tag e f (f a) -> f (Tagged tag e f a)
forall k (tag :: k) (e :: Effect) (f :: * -> *) (m :: * -> *) a b.
(Traversable (e f), Monad m) =>
(a -> m b) -> Tagged tag e f a -> m (Tagged tag e f b)
forall k (tag :: k) (e :: Effect) (f :: * -> *) (f :: * -> *) a b.
(Traversable (e f), Applicative f) =>
(a -> f b) -> Tagged tag e f a -> f (Tagged tag e f b)
forall (t :: * -> *).
(Functor t, Foldable t) =>
(forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> t a -> f (t b))
-> (forall (f :: * -> *) a. Applicative f => t (f a) -> f (t a))
-> (forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> t a -> m (t b))
-> (forall (m :: * -> *) a. Monad m => t (m a) -> m (t a))
-> Traversable t
forall (m :: * -> *) a.
Monad m =>
Tagged tag e f (m a) -> m (Tagged tag e f a)
forall (f :: * -> *) a.
Applicative f =>
Tagged tag e f (f a) -> f (Tagged tag e f a)
forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> Tagged tag e f a -> m (Tagged tag e f b)
forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> Tagged tag e f a -> f (Tagged tag e f b)
$ctraverse :: forall k (tag :: k) (e :: Effect) (f :: * -> *) (f :: * -> *) a b.
(Traversable (e f), Applicative f) =>
(a -> f b) -> Tagged tag e f a -> f (Tagged tag e f b)
traverse :: forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> Tagged tag e f a -> f (Tagged tag e f b)
$csequenceA :: forall k (tag :: k) (e :: Effect) (f :: * -> *) (f :: * -> *) a.
(Traversable (e f), Applicative f) =>
Tagged tag e f (f a) -> f (Tagged tag e f a)
sequenceA :: forall (f :: * -> *) a.
Applicative f =>
Tagged tag e f (f a) -> f (Tagged tag e f a)
$cmapM :: forall k (tag :: k) (e :: Effect) (f :: * -> *) (m :: * -> *) a b.
(Traversable (e f), Monad m) =>
(a -> m b) -> Tagged tag e f a -> m (Tagged tag e f b)
mapM :: forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> Tagged tag e f a -> m (Tagged tag e f b)
$csequence :: forall k (tag :: k) (e :: Effect) (f :: * -> *) (m :: * -> *) a.
(Traversable (e f), Monad m) =>
Tagged tag e f (m a) -> m (Tagged tag e f a)
sequence :: forall (m :: * -> *) a.
Monad m =>
Tagged tag e f (m a) -> m (Tagged tag e f a)
Traversable)
deriving newtype ((forall (f :: * -> *) (g :: * -> *) a.
(forall x. f x -> g x) -> Tagged tag e f a -> Tagged tag e g a)
-> HFunctor (Tagged tag e)
forall k (tag :: k) (e :: Effect) (f :: * -> *) (g :: * -> *) a.
HFunctor e =>
(forall x. f x -> g x) -> Tagged tag e f a -> Tagged tag e g a
forall (f :: * -> *) (g :: * -> *) a.
(forall x. f x -> g x) -> Tagged tag e f a -> Tagged tag e g a
forall (ff :: Effect).
(forall (f :: * -> *) (g :: * -> *) a.
(forall x. f x -> g x) -> ff f a -> ff g a)
-> HFunctor ff
$chfmap :: forall k (tag :: k) (e :: Effect) (f :: * -> *) (g :: * -> *) a.
HFunctor e =>
(forall x. f x -> g x) -> Tagged tag e f a -> Tagged tag e g a
hfmap :: forall (f :: * -> *) (g :: * -> *) a.
(forall x. f x -> g x) -> Tagged tag e f a -> Tagged tag e g a
HFunctor)
type instance OrderOf (Tagged tag e) = OrderOf e
instance (FirstOrder e) => FirstOrder (Tagged tag e)
type instance LabelOf (Tagged tag e) = TaggedLabel tag (LabelOf e)
data TaggedLabel tag (label :: Type)
type e # tag = Tagged tag e
infixl 7 #