{-# LANGUAGE DeriveTraversable #-}
{-# LANGUAGE DerivingVia #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE QuantifiedConstraints #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE StandaloneKindSignatures #-}
{-# LANGUAGE UndecidableInstances #-}

module Data.Functor.Flip1 where

import AutoLift (Reflected1 (..))
import Control.Applicative
import Control.Monad
import Control.Monad.Free (MonadFree (..))
import Data.Coerce
import Data.Functor.Classes
import Data.Kind (Type)

-- | Swaps the order of parameters. 'Flip1' is like 'Data.Bifunctor.Flip.Flip' but has
--   an additional parameter.
--
-- > newtype Flip1 t a b c = Flip1 {unFlip1 :: t b a c}
type Flip1 :: (k1 -> k2 -> k3 -> Type) -> k2 -> k1 -> k3 -> Type
newtype Flip1 t a b c = Flip1 {forall k1 k2 k3 (t :: k1 -> k2 -> k3 -> *) (a :: k2) (b :: k1)
       (c :: k3).
Flip1 t a b c -> t b a c
unFlip1 :: t b a c}
  deriving stock (Flip1 t a b c -> Flip1 t a b c -> Bool
(Flip1 t a b c -> Flip1 t a b c -> Bool)
-> (Flip1 t a b c -> Flip1 t a b c -> Bool) -> Eq (Flip1 t a b c)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
forall k2 k1 k3 (t :: k1 -> k2 -> k3 -> *) (a :: k2) (b :: k1)
       (c :: k3).
Eq (t b a c) =>
Flip1 t a b c -> Flip1 t a b c -> Bool
$c== :: forall k2 k1 k3 (t :: k1 -> k2 -> k3 -> *) (a :: k2) (b :: k1)
       (c :: k3).
Eq (t b a c) =>
Flip1 t a b c -> Flip1 t a b c -> Bool
== :: Flip1 t a b c -> Flip1 t a b c -> Bool
$c/= :: forall k2 k1 k3 (t :: k1 -> k2 -> k3 -> *) (a :: k2) (b :: k1)
       (c :: k3).
Eq (t b a c) =>
Flip1 t a b c -> Flip1 t a b c -> Bool
/= :: Flip1 t a b c -> Flip1 t a b c -> Bool
Eq, Eq (Flip1 t a b c)
Eq (Flip1 t a b c) =>
(Flip1 t a b c -> Flip1 t a b c -> Ordering)
-> (Flip1 t a b c -> Flip1 t a b c -> Bool)
-> (Flip1 t a b c -> Flip1 t a b c -> Bool)
-> (Flip1 t a b c -> Flip1 t a b c -> Bool)
-> (Flip1 t a b c -> Flip1 t a b c -> Bool)
-> (Flip1 t a b c -> Flip1 t a b c -> Flip1 t a b c)
-> (Flip1 t a b c -> Flip1 t a b c -> Flip1 t a b c)
-> Ord (Flip1 t a b c)
Flip1 t a b c -> Flip1 t a b c -> Bool
Flip1 t a b c -> Flip1 t a b c -> Ordering
Flip1 t a b c -> Flip1 t a b c -> Flip1 t a b c
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
forall k2 k1 k3 (t :: k1 -> k2 -> k3 -> *) (a :: k2) (b :: k1)
       (c :: k3).
Ord (t b a c) =>
Eq (Flip1 t a b c)
forall k2 k1 k3 (t :: k1 -> k2 -> k3 -> *) (a :: k2) (b :: k1)
       (c :: k3).
Ord (t b a c) =>
Flip1 t a b c -> Flip1 t a b c -> Bool
forall k2 k1 k3 (t :: k1 -> k2 -> k3 -> *) (a :: k2) (b :: k1)
       (c :: k3).
Ord (t b a c) =>
Flip1 t a b c -> Flip1 t a b c -> Ordering
forall k2 k1 k3 (t :: k1 -> k2 -> k3 -> *) (a :: k2) (b :: k1)
       (c :: k3).
Ord (t b a c) =>
Flip1 t a b c -> Flip1 t a b c -> Flip1 t a b c
$ccompare :: forall k2 k1 k3 (t :: k1 -> k2 -> k3 -> *) (a :: k2) (b :: k1)
       (c :: k3).
Ord (t b a c) =>
Flip1 t a b c -> Flip1 t a b c -> Ordering
compare :: Flip1 t a b c -> Flip1 t a b c -> Ordering
$c< :: forall k2 k1 k3 (t :: k1 -> k2 -> k3 -> *) (a :: k2) (b :: k1)
       (c :: k3).
Ord (t b a c) =>
Flip1 t a b c -> Flip1 t a b c -> Bool
< :: Flip1 t a b c -> Flip1 t a b c -> Bool
$c<= :: forall k2 k1 k3 (t :: k1 -> k2 -> k3 -> *) (a :: k2) (b :: k1)
       (c :: k3).
Ord (t b a c) =>
Flip1 t a b c -> Flip1 t a b c -> Bool
<= :: Flip1 t a b c -> Flip1 t a b c -> Bool
$c> :: forall k2 k1 k3 (t :: k1 -> k2 -> k3 -> *) (a :: k2) (b :: k1)
       (c :: k3).
Ord (t b a c) =>
Flip1 t a b c -> Flip1 t a b c -> Bool
> :: Flip1 t a b c -> Flip1 t a b c -> Bool
$c>= :: forall k2 k1 k3 (t :: k1 -> k2 -> k3 -> *) (a :: k2) (b :: k1)
       (c :: k3).
Ord (t b a c) =>
Flip1 t a b c -> Flip1 t a b c -> Bool
>= :: Flip1 t a b c -> Flip1 t a b c -> Bool
$cmax :: forall k2 k1 k3 (t :: k1 -> k2 -> k3 -> *) (a :: k2) (b :: k1)
       (c :: k3).
Ord (t b a c) =>
Flip1 t a b c -> Flip1 t a b c -> Flip1 t a b c
max :: Flip1 t a b c -> Flip1 t a b c -> Flip1 t a b c
$cmin :: forall k2 k1 k3 (t :: k1 -> k2 -> k3 -> *) (a :: k2) (b :: k1)
       (c :: k3).
Ord (t b a c) =>
Flip1 t a b c -> Flip1 t a b c -> Flip1 t a b c
min :: Flip1 t a b c -> Flip1 t a b c -> Flip1 t a b c
Ord, Int -> Flip1 t a b c -> ShowS
[Flip1 t a b c] -> ShowS
Flip1 t a b c -> String
(Int -> Flip1 t a b c -> ShowS)
-> (Flip1 t a b c -> String)
-> ([Flip1 t a b c] -> ShowS)
-> Show (Flip1 t a b c)
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
forall k2 k1 k3 (t :: k1 -> k2 -> k3 -> *) (a :: k2) (b :: k1)
       (c :: k3).
Show (t b a c) =>
Int -> Flip1 t a b c -> ShowS
forall k2 k1 k3 (t :: k1 -> k2 -> k3 -> *) (a :: k2) (b :: k1)
       (c :: k3).
Show (t b a c) =>
[Flip1 t a b c] -> ShowS
forall k2 k1 k3 (t :: k1 -> k2 -> k3 -> *) (a :: k2) (b :: k1)
       (c :: k3).
Show (t b a c) =>
Flip1 t a b c -> String
$cshowsPrec :: forall k2 k1 k3 (t :: k1 -> k2 -> k3 -> *) (a :: k2) (b :: k1)
       (c :: k3).
Show (t b a c) =>
Int -> Flip1 t a b c -> ShowS
showsPrec :: Int -> Flip1 t a b c -> ShowS
$cshow :: forall k2 k1 k3 (t :: k1 -> k2 -> k3 -> *) (a :: k2) (b :: k1)
       (c :: k3).
Show (t b a c) =>
Flip1 t a b c -> String
show :: Flip1 t a b c -> String
$cshowList :: forall k2 k1 k3 (t :: k1 -> k2 -> k3 -> *) (a :: k2) (b :: k1)
       (c :: k3).
Show (t b a c) =>
[Flip1 t a b c] -> ShowS
showList :: [Flip1 t a b c] -> ShowS
Show, ReadPrec [Flip1 t a b c]
ReadPrec (Flip1 t a b c)
Int -> ReadS (Flip1 t a b c)
ReadS [Flip1 t a b c]
(Int -> ReadS (Flip1 t a b c))
-> ReadS [Flip1 t a b c]
-> ReadPrec (Flip1 t a b c)
-> ReadPrec [Flip1 t a b c]
-> Read (Flip1 t a b c)
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
forall k2 k1 k3 (t :: k1 -> k2 -> k3 -> *) (a :: k2) (b :: k1)
       (c :: k3).
Read (t b a c) =>
ReadPrec [Flip1 t a b c]
forall k2 k1 k3 (t :: k1 -> k2 -> k3 -> *) (a :: k2) (b :: k1)
       (c :: k3).
Read (t b a c) =>
ReadPrec (Flip1 t a b c)
forall k2 k1 k3 (t :: k1 -> k2 -> k3 -> *) (a :: k2) (b :: k1)
       (c :: k3).
Read (t b a c) =>
Int -> ReadS (Flip1 t a b c)
forall k2 k1 k3 (t :: k1 -> k2 -> k3 -> *) (a :: k2) (b :: k1)
       (c :: k3).
Read (t b a c) =>
ReadS [Flip1 t a b c]
$creadsPrec :: forall k2 k1 k3 (t :: k1 -> k2 -> k3 -> *) (a :: k2) (b :: k1)
       (c :: k3).
Read (t b a c) =>
Int -> ReadS (Flip1 t a b c)
readsPrec :: Int -> ReadS (Flip1 t a b c)
$creadList :: forall k2 k1 k3 (t :: k1 -> k2 -> k3 -> *) (a :: k2) (b :: k1)
       (c :: k3).
Read (t b a c) =>
ReadS [Flip1 t a b c]
readList :: ReadS [Flip1 t a b c]
$creadPrec :: forall k2 k1 k3 (t :: k1 -> k2 -> k3 -> *) (a :: k2) (b :: k1)
       (c :: k3).
Read (t b a c) =>
ReadPrec (Flip1 t a b c)
readPrec :: ReadPrec (Flip1 t a b c)
$creadListPrec :: forall k2 k1 k3 (t :: k1 -> k2 -> k3 -> *) (a :: k2) (b :: k1)
       (c :: k3).
Read (t b a c) =>
ReadPrec [Flip1 t a b c]
readListPrec :: ReadPrec [Flip1 t a b c]
Read, Functor (Flip1 t a b)
Foldable (Flip1 t a b)
(Functor (Flip1 t a b), Foldable (Flip1 t a b)) =>
(forall (f :: * -> *) a b.
 Applicative f =>
 (a -> f b) -> Flip1 t a b a -> f (Flip1 t a b b))
-> (forall (f :: * -> *) a.
    Applicative f =>
    Flip1 t a b (f a) -> f (Flip1 t a b a))
-> (forall (m :: * -> *) a b.
    Monad m =>
    (a -> m b) -> Flip1 t a b a -> m (Flip1 t a b b))
-> (forall (m :: * -> *) a.
    Monad m =>
    Flip1 t a b (m a) -> m (Flip1 t a b a))
-> Traversable (Flip1 t a b)
forall k2 k1 (t :: k1 -> k2 -> * -> *) (a :: k2) (b :: k1).
Traversable (t b a) =>
Functor (Flip1 t a b)
forall k2 k1 (t :: k1 -> k2 -> * -> *) (a :: k2) (b :: k1).
Traversable (t b a) =>
Foldable (Flip1 t a b)
forall k2 k1 (t :: k1 -> k2 -> * -> *) (a :: k2) (b :: k1)
       (m :: * -> *) a.
(Traversable (t b a), Monad m) =>
Flip1 t a b (m a) -> m (Flip1 t a b a)
forall k2 k1 (t :: k1 -> k2 -> * -> *) (a :: k2) (b :: k1)
       (f :: * -> *) a.
(Traversable (t b a), Applicative f) =>
Flip1 t a b (f a) -> f (Flip1 t a b a)
forall k2 k1 (t :: k1 -> k2 -> * -> *) (a :: k2) (b :: k1)
       (m :: * -> *) a b.
(Traversable (t b a), Monad m) =>
(a -> m b) -> Flip1 t a b a -> m (Flip1 t a b b)
forall k2 k1 (t :: k1 -> k2 -> * -> *) (a :: k2) (b :: k1)
       (f :: * -> *) a b.
(Traversable (t b a), Applicative f) =>
(a -> f b) -> Flip1 t a b a -> f (Flip1 t a b 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 =>
Flip1 t a b (m a) -> m (Flip1 t a b a)
forall (f :: * -> *) a.
Applicative f =>
Flip1 t a b (f a) -> f (Flip1 t a b a)
forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> Flip1 t a b a -> m (Flip1 t a b b)
forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> Flip1 t a b a -> f (Flip1 t a b b)
$ctraverse :: forall k2 k1 (t :: k1 -> k2 -> * -> *) (a :: k2) (b :: k1)
       (f :: * -> *) a b.
(Traversable (t b a), Applicative f) =>
(a -> f b) -> Flip1 t a b a -> f (Flip1 t a b b)
traverse :: forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> Flip1 t a b a -> f (Flip1 t a b b)
$csequenceA :: forall k2 k1 (t :: k1 -> k2 -> * -> *) (a :: k2) (b :: k1)
       (f :: * -> *) a.
(Traversable (t b a), Applicative f) =>
Flip1 t a b (f a) -> f (Flip1 t a b a)
sequenceA :: forall (f :: * -> *) a.
Applicative f =>
Flip1 t a b (f a) -> f (Flip1 t a b a)
$cmapM :: forall k2 k1 (t :: k1 -> k2 -> * -> *) (a :: k2) (b :: k1)
       (m :: * -> *) a b.
(Traversable (t b a), Monad m) =>
(a -> m b) -> Flip1 t a b a -> m (Flip1 t a b b)
mapM :: forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> Flip1 t a b a -> m (Flip1 t a b b)
$csequence :: forall k2 k1 (t :: k1 -> k2 -> * -> *) (a :: k2) (b :: k1)
       (m :: * -> *) a.
(Traversable (t b a), Monad m) =>
Flip1 t a b (m a) -> m (Flip1 t a b a)
sequence :: forall (m :: * -> *) a.
Monad m =>
Flip1 t a b (m a) -> m (Flip1 t a b a)
Traversable)
  deriving
    ( (forall a b. (a -> b) -> Flip1 t a b a -> Flip1 t a b b)
-> (forall a b. a -> Flip1 t a b b -> Flip1 t a b a)
-> Functor (Flip1 t a b)
forall a b. a -> Flip1 t a b b -> Flip1 t a b a
forall a b. (a -> b) -> Flip1 t a b a -> Flip1 t a b b
forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a b.
Functor (t b a) =>
a -> Flip1 t a b b -> Flip1 t a b a
forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a b.
Functor (t b a) =>
(a -> b) -> Flip1 t a b a -> Flip1 t a b b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
$cfmap :: forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a b.
Functor (t b a) =>
(a -> b) -> Flip1 t a b a -> Flip1 t a b b
fmap :: forall a b. (a -> b) -> Flip1 t a b a -> Flip1 t a b b
$c<$ :: forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a b.
Functor (t b a) =>
a -> Flip1 t a b b -> Flip1 t a b a
<$ :: forall a b. a -> Flip1 t a b b -> Flip1 t a b a
Functor,
      (forall a. Eq a => Eq (Flip1 t a b a)) =>
(forall a b.
 (a -> b -> Bool) -> Flip1 t a b a -> Flip1 t a b b -> Bool)
-> Eq1 (Flip1 t a b)
forall a. Eq a => Eq (Flip1 t a b a)
forall a b.
(a -> b -> Bool) -> Flip1 t a b a -> Flip1 t a b b -> Bool
forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a.
(Eq1 (t b a), Eq a) =>
Eq (Flip1 t a b a)
forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a b.
Eq1 (t b a) =>
(a -> b -> Bool) -> Flip1 t a b a -> Flip1 t a b b -> Bool
forall (f :: * -> *).
(forall a. Eq a => Eq (f a)) =>
(forall a b. (a -> b -> Bool) -> f a -> f b -> Bool) -> Eq1 f
$cliftEq :: forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a b.
Eq1 (t b a) =>
(a -> b -> Bool) -> Flip1 t a b a -> Flip1 t a b b -> Bool
liftEq :: forall a b.
(a -> b -> Bool) -> Flip1 t a b a -> Flip1 t a b b -> Bool
Eq1,
      Eq1 (Flip1 t a b)
(Eq1 (Flip1 t a b), forall a. Ord a => Ord (Flip1 t a b a)) =>
(forall a b.
 (a -> b -> Ordering) -> Flip1 t a b a -> Flip1 t a b b -> Ordering)
-> Ord1 (Flip1 t a b)
forall a. Ord a => Ord (Flip1 t a b a)
forall a b.
(a -> b -> Ordering) -> Flip1 t a b a -> Flip1 t a b b -> Ordering
forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2).
Ord1 (t b a) =>
Eq1 (Flip1 t a b)
forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a.
(Ord1 (t b a), Ord a) =>
Ord (Flip1 t a b a)
forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a b.
Ord1 (t b a) =>
(a -> b -> Ordering) -> Flip1 t a b a -> Flip1 t a b b -> Ordering
forall (f :: * -> *).
(Eq1 f, forall a. Ord a => Ord (f a)) =>
(forall a b. (a -> b -> Ordering) -> f a -> f b -> Ordering)
-> Ord1 f
$cliftCompare :: forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a b.
Ord1 (t b a) =>
(a -> b -> Ordering) -> Flip1 t a b a -> Flip1 t a b b -> Ordering
liftCompare :: forall a b.
(a -> b -> Ordering) -> Flip1 t a b a -> Flip1 t a b b -> Ordering
Ord1,
      (forall m. Monoid m => Flip1 t a b m -> m)
-> (forall m a. Monoid m => (a -> m) -> Flip1 t a b a -> m)
-> (forall m a. Monoid m => (a -> m) -> Flip1 t a b a -> m)
-> (forall a b. (a -> b -> b) -> b -> Flip1 t a b a -> b)
-> (forall a b. (a -> b -> b) -> b -> Flip1 t a b a -> b)
-> (forall b a. (b -> a -> b) -> b -> Flip1 t a b a -> b)
-> (forall b a. (b -> a -> b) -> b -> Flip1 t a b a -> b)
-> (forall a. (a -> a -> a) -> Flip1 t a b a -> a)
-> (forall a. (a -> a -> a) -> Flip1 t a b a -> a)
-> (forall a. Flip1 t a b a -> [a])
-> (forall a. Flip1 t a b a -> Bool)
-> (forall a. Flip1 t a b a -> Int)
-> (forall a. Eq a => a -> Flip1 t a b a -> Bool)
-> (forall a. Ord a => Flip1 t a b a -> a)
-> (forall a. Ord a => Flip1 t a b a -> a)
-> (forall a. Num a => Flip1 t a b a -> a)
-> (forall a. Num a => Flip1 t a b a -> a)
-> Foldable (Flip1 t a b)
forall a. Eq a => a -> Flip1 t a b a -> Bool
forall a. Num a => Flip1 t a b a -> a
forall a. Ord a => Flip1 t a b a -> a
forall m. Monoid m => Flip1 t a b m -> m
forall a. Flip1 t a b a -> Bool
forall a. Flip1 t a b a -> Int
forall a. Flip1 t a b a -> [a]
forall a. (a -> a -> a) -> Flip1 t a b a -> a
forall m a. Monoid m => (a -> m) -> Flip1 t a b a -> m
forall b a. (b -> a -> b) -> b -> Flip1 t a b a -> b
forall a b. (a -> b -> b) -> b -> Flip1 t a b a -> b
forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a.
(Foldable (t b a), Eq a) =>
a -> Flip1 t a b a -> Bool
forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a.
(Foldable (t b a), Num a) =>
Flip1 t a b a -> a
forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a.
(Foldable (t b a), Ord a) =>
Flip1 t a b a -> a
forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) m.
(Foldable (t b a), Monoid m) =>
Flip1 t a b m -> m
forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a.
Foldable (t b a) =>
Flip1 t a b a -> Bool
forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a.
Foldable (t b a) =>
Flip1 t a b a -> Int
forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a.
Foldable (t b a) =>
Flip1 t a b a -> [a]
forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a.
Foldable (t b a) =>
(a -> a -> a) -> Flip1 t a b a -> a
forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) m a.
(Foldable (t b a), Monoid m) =>
(a -> m) -> Flip1 t a b a -> m
forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) b a.
Foldable (t b a) =>
(b -> a -> b) -> b -> Flip1 t a b a -> b
forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a b.
Foldable (t b a) =>
(a -> b -> b) -> b -> Flip1 t a b 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 k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) m.
(Foldable (t b a), Monoid m) =>
Flip1 t a b m -> m
fold :: forall m. Monoid m => Flip1 t a b m -> m
$cfoldMap :: forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) m a.
(Foldable (t b a), Monoid m) =>
(a -> m) -> Flip1 t a b a -> m
foldMap :: forall m a. Monoid m => (a -> m) -> Flip1 t a b a -> m
$cfoldMap' :: forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) m a.
(Foldable (t b a), Monoid m) =>
(a -> m) -> Flip1 t a b a -> m
foldMap' :: forall m a. Monoid m => (a -> m) -> Flip1 t a b a -> m
$cfoldr :: forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a b.
Foldable (t b a) =>
(a -> b -> b) -> b -> Flip1 t a b a -> b
foldr :: forall a b. (a -> b -> b) -> b -> Flip1 t a b a -> b
$cfoldr' :: forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a b.
Foldable (t b a) =>
(a -> b -> b) -> b -> Flip1 t a b a -> b
foldr' :: forall a b. (a -> b -> b) -> b -> Flip1 t a b a -> b
$cfoldl :: forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) b a.
Foldable (t b a) =>
(b -> a -> b) -> b -> Flip1 t a b a -> b
foldl :: forall b a. (b -> a -> b) -> b -> Flip1 t a b a -> b
$cfoldl' :: forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) b a.
Foldable (t b a) =>
(b -> a -> b) -> b -> Flip1 t a b a -> b
foldl' :: forall b a. (b -> a -> b) -> b -> Flip1 t a b a -> b
$cfoldr1 :: forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a.
Foldable (t b a) =>
(a -> a -> a) -> Flip1 t a b a -> a
foldr1 :: forall a. (a -> a -> a) -> Flip1 t a b a -> a
$cfoldl1 :: forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a.
Foldable (t b a) =>
(a -> a -> a) -> Flip1 t a b a -> a
foldl1 :: forall a. (a -> a -> a) -> Flip1 t a b a -> a
$ctoList :: forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a.
Foldable (t b a) =>
Flip1 t a b a -> [a]
toList :: forall a. Flip1 t a b a -> [a]
$cnull :: forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a.
Foldable (t b a) =>
Flip1 t a b a -> Bool
null :: forall a. Flip1 t a b a -> Bool
$clength :: forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a.
Foldable (t b a) =>
Flip1 t a b a -> Int
length :: forall a. Flip1 t a b a -> Int
$celem :: forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a.
(Foldable (t b a), Eq a) =>
a -> Flip1 t a b a -> Bool
elem :: forall a. Eq a => a -> Flip1 t a b a -> Bool
$cmaximum :: forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a.
(Foldable (t b a), Ord a) =>
Flip1 t a b a -> a
maximum :: forall a. Ord a => Flip1 t a b a -> a
$cminimum :: forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a.
(Foldable (t b a), Ord a) =>
Flip1 t a b a -> a
minimum :: forall a. Ord a => Flip1 t a b a -> a
$csum :: forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a.
(Foldable (t b a), Num a) =>
Flip1 t a b a -> a
sum :: forall a. Num a => Flip1 t a b a -> a
$cproduct :: forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a.
(Foldable (t b a), Num a) =>
Flip1 t a b a -> a
product :: forall a. Num a => Flip1 t a b a -> a
Foldable,
      Functor (Flip1 t a b)
Functor (Flip1 t a b) =>
(forall a. a -> Flip1 t a b a)
-> (forall a b.
    Flip1 t a b (a -> b) -> Flip1 t a b a -> Flip1 t a b b)
-> (forall a b c.
    (a -> b -> c) -> Flip1 t a b a -> Flip1 t a b b -> Flip1 t a b c)
-> (forall a b. Flip1 t a b a -> Flip1 t a b b -> Flip1 t a b b)
-> (forall a b. Flip1 t a b a -> Flip1 t a b b -> Flip1 t a b a)
-> Applicative (Flip1 t a b)
forall a. a -> Flip1 t a b a
forall a b. Flip1 t a b a -> Flip1 t a b b -> Flip1 t a b a
forall a b. Flip1 t a b a -> Flip1 t a b b -> Flip1 t a b b
forall a b. Flip1 t a b (a -> b) -> Flip1 t a b a -> Flip1 t a b b
forall a b c.
(a -> b -> c) -> Flip1 t a b a -> Flip1 t a b b -> Flip1 t a b c
forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2).
Applicative (t b a) =>
Functor (Flip1 t a b)
forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a.
Applicative (t b a) =>
a -> Flip1 t a b a
forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a b.
Applicative (t b a) =>
Flip1 t a b a -> Flip1 t a b b -> Flip1 t a b a
forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a b.
Applicative (t b a) =>
Flip1 t a b a -> Flip1 t a b b -> Flip1 t a b b
forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a b.
Applicative (t b a) =>
Flip1 t a b (a -> b) -> Flip1 t a b a -> Flip1 t a b b
forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a b c.
Applicative (t b a) =>
(a -> b -> c) -> Flip1 t a b a -> Flip1 t a b b -> Flip1 t a b c
forall (f :: * -> *).
Functor f =>
(forall a. a -> f a)
-> (forall a b. f (a -> b) -> f a -> f b)
-> (forall a b c. (a -> b -> c) -> f a -> f b -> f c)
-> (forall a b. f a -> f b -> f b)
-> (forall a b. f a -> f b -> f a)
-> Applicative f
$cpure :: forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a.
Applicative (t b a) =>
a -> Flip1 t a b a
pure :: forall a. a -> Flip1 t a b a
$c<*> :: forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a b.
Applicative (t b a) =>
Flip1 t a b (a -> b) -> Flip1 t a b a -> Flip1 t a b b
<*> :: forall a b. Flip1 t a b (a -> b) -> Flip1 t a b a -> Flip1 t a b b
$cliftA2 :: forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a b c.
Applicative (t b a) =>
(a -> b -> c) -> Flip1 t a b a -> Flip1 t a b b -> Flip1 t a b c
liftA2 :: forall a b c.
(a -> b -> c) -> Flip1 t a b a -> Flip1 t a b b -> Flip1 t a b c
$c*> :: forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a b.
Applicative (t b a) =>
Flip1 t a b a -> Flip1 t a b b -> Flip1 t a b b
*> :: forall a b. Flip1 t a b a -> Flip1 t a b b -> Flip1 t a b b
$c<* :: forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a b.
Applicative (t b a) =>
Flip1 t a b a -> Flip1 t a b b -> Flip1 t a b a
<* :: forall a b. Flip1 t a b a -> Flip1 t a b b -> Flip1 t a b a
Applicative,
      Applicative (Flip1 t a b)
Applicative (Flip1 t a b) =>
(forall a. Flip1 t a b a)
-> (forall a. Flip1 t a b a -> Flip1 t a b a -> Flip1 t a b a)
-> (forall a. Flip1 t a b a -> Flip1 t a b [a])
-> (forall a. Flip1 t a b a -> Flip1 t a b [a])
-> Alternative (Flip1 t a b)
forall a. Flip1 t a b a
forall a. Flip1 t a b a -> Flip1 t a b [a]
forall a. Flip1 t a b a -> Flip1 t a b a -> Flip1 t a b a
forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2).
Alternative (t b a) =>
Applicative (Flip1 t a b)
forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a.
Alternative (t b a) =>
Flip1 t a b a
forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a.
Alternative (t b a) =>
Flip1 t a b a -> Flip1 t a b [a]
forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a.
Alternative (t b a) =>
Flip1 t a b a -> Flip1 t a b a -> Flip1 t a b a
forall (f :: * -> *).
Applicative f =>
(forall a. f a)
-> (forall a. f a -> f a -> f a)
-> (forall a. f a -> f [a])
-> (forall a. f a -> f [a])
-> Alternative f
$cempty :: forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a.
Alternative (t b a) =>
Flip1 t a b a
empty :: forall a. Flip1 t a b a
$c<|> :: forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a.
Alternative (t b a) =>
Flip1 t a b a -> Flip1 t a b a -> Flip1 t a b a
<|> :: forall a. Flip1 t a b a -> Flip1 t a b a -> Flip1 t a b a
$csome :: forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a.
Alternative (t b a) =>
Flip1 t a b a -> Flip1 t a b [a]
some :: forall a. Flip1 t a b a -> Flip1 t a b [a]
$cmany :: forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a.
Alternative (t b a) =>
Flip1 t a b a -> Flip1 t a b [a]
many :: forall a. Flip1 t a b a -> Flip1 t a b [a]
Alternative,
      Applicative (Flip1 t a b)
Applicative (Flip1 t a b) =>
(forall a b.
 Flip1 t a b a -> (a -> Flip1 t a b b) -> Flip1 t a b b)
-> (forall a b. Flip1 t a b a -> Flip1 t a b b -> Flip1 t a b b)
-> (forall a. a -> Flip1 t a b a)
-> Monad (Flip1 t a b)
forall a. a -> Flip1 t a b a
forall a b. Flip1 t a b a -> Flip1 t a b b -> Flip1 t a b b
forall a b. Flip1 t a b a -> (a -> Flip1 t a b b) -> Flip1 t a b b
forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2).
Monad (t b a) =>
Applicative (Flip1 t a b)
forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a.
Monad (t b a) =>
a -> Flip1 t a b a
forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a b.
Monad (t b a) =>
Flip1 t a b a -> Flip1 t a b b -> Flip1 t a b b
forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a b.
Monad (t b a) =>
Flip1 t a b a -> (a -> Flip1 t a b b) -> Flip1 t a b b
forall (m :: * -> *).
Applicative m =>
(forall a b. m a -> (a -> m b) -> m b)
-> (forall a b. m a -> m b -> m b)
-> (forall a. a -> m a)
-> Monad m
$c>>= :: forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a b.
Monad (t b a) =>
Flip1 t a b a -> (a -> Flip1 t a b b) -> Flip1 t a b b
>>= :: forall a b. Flip1 t a b a -> (a -> Flip1 t a b b) -> Flip1 t a b b
$c>> :: forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a b.
Monad (t b a) =>
Flip1 t a b a -> Flip1 t a b b -> Flip1 t a b b
>> :: forall a b. Flip1 t a b a -> Flip1 t a b b -> Flip1 t a b b
$creturn :: forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a.
Monad (t b a) =>
a -> Flip1 t a b a
return :: forall a. a -> Flip1 t a b a
Monad,
      Monad (Flip1 t a b)
Alternative (Flip1 t a b)
(Alternative (Flip1 t a b), Monad (Flip1 t a b)) =>
(forall a. Flip1 t a b a)
-> (forall a. Flip1 t a b a -> Flip1 t a b a -> Flip1 t a b a)
-> MonadPlus (Flip1 t a b)
forall a. Flip1 t a b a
forall a. Flip1 t a b a -> Flip1 t a b a -> Flip1 t a b a
forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2).
MonadPlus (t b a) =>
Monad (Flip1 t a b)
forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2).
MonadPlus (t b a) =>
Alternative (Flip1 t a b)
forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a.
MonadPlus (t b a) =>
Flip1 t a b a
forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a.
MonadPlus (t b a) =>
Flip1 t a b a -> Flip1 t a b a -> Flip1 t a b a
forall (m :: * -> *).
(Alternative m, Monad m) =>
(forall a. m a) -> (forall a. m a -> m a -> m a) -> MonadPlus m
$cmzero :: forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a.
MonadPlus (t b a) =>
Flip1 t a b a
mzero :: forall a. Flip1 t a b a
$cmplus :: forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a.
MonadPlus (t b a) =>
Flip1 t a b a -> Flip1 t a b a -> Flip1 t a b a
mplus :: forall a. Flip1 t a b a -> Flip1 t a b a -> Flip1 t a b a
MonadPlus,
      Monad (Flip1 t a b)
Monad (Flip1 t a b) =>
(forall a. String -> Flip1 t a b a) -> MonadFail (Flip1 t a b)
forall a. String -> Flip1 t a b a
forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2).
MonadFail (t b a) =>
Monad (Flip1 t a b)
forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a.
MonadFail (t b a) =>
String -> Flip1 t a b a
forall (m :: * -> *).
Monad m =>
(forall a. String -> m a) -> MonadFail m
$cfail :: forall k1 k2 (t :: k1 -> k2 -> * -> *) (b :: k1) (a :: k2) a.
MonadFail (t b a) =>
String -> Flip1 t a b a
fail :: forall a. String -> Flip1 t a b a
MonadFail
    )
    via (t b a)

deriving via
  (Reflected1 (Flip1 t a b))
  instance
    ( forall c. Show c => Show (t b a c),
      forall x y. Coercible x y => Coercible (t b a x) (t b a y)
    ) =>
    Show1 (Flip1 t a b)

deriving via
  (Reflected1 (Flip1 t a b))
  instance
    ( forall c. Read c => Read (t b a c),
      forall x y. Coercible x y => Coercible (t b a x) (t b a y)
    ) =>
    Read1 (Flip1 t a b)

instance (Functor h, MonadFree h (t g f)) => MonadFree h (Flip1 t f g) where
  wrap :: forall a. h (Flip1 t f g a) -> Flip1 t f g a
wrap = t g f a -> Flip1 t f g a
forall k1 k2 k3 (t :: k1 -> k2 -> k3 -> *) (a :: k2) (b :: k1)
       (c :: k3).
t b a c -> Flip1 t a b c
Flip1 (t g f a -> Flip1 t f g a)
-> (h (Flip1 t f g a) -> t g f a)
-> h (Flip1 t f g a)
-> Flip1 t f g a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. h (t g f a) -> t g f a
forall a. h (t g f a) -> t g f a
forall (f :: * -> *) (m :: * -> *) a.
MonadFree f m =>
f (m a) -> m a
wrap (h (t g f a) -> t g f a)
-> (h (Flip1 t f g a) -> h (t g f a))
-> h (Flip1 t f g a)
-> t g f a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Flip1 t f g a -> t g f a) -> h (Flip1 t f g a) -> h (t g f a)
forall a b. (a -> b) -> h a -> h b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Flip1 t f g a -> t g f a
forall k1 k2 k3 (t :: k1 -> k2 -> k3 -> *) (a :: k2) (b :: k1)
       (c :: k3).
Flip1 t a b c -> t b a c
unFlip1