module Data.Free.Sum (module Data.Free.Sum, pattern L1, pattern R1) where
import Control.Effect (type (~>))
import Data.Effect (Nop)
import GHC.Generics (type (:+:) (L1, R1))
type (+) = (:+:)
infixr 5 +
caseF :: (f a -> r) -> (g a -> r) -> (f + g) a -> r
caseF :: forall {k} (f :: k -> *) (a :: k) r (g :: k -> *).
(f a -> r) -> (g a -> r) -> (+) f g a -> r
caseF f a -> r
f g a -> r
g = \case
L1 f a
x -> f a -> r
f f a
x
R1 g a
x -> g a -> r
g g a
x
{-# INLINE caseF #-}
absurdL :: Nop + f ~> f
absurdL :: forall (f :: * -> *). (Nop + f) ~> f
absurdL = forall {k} (f :: k -> *) (a :: k) r (g :: k -> *).
(f a -> r) -> (g a -> r) -> (+) f g a -> r
caseF \case {} forall a. a -> a
id
{-# INLINE absurdL #-}
absurdR :: f + Nop ~> f
absurdR :: forall (f :: * -> *). (f + Nop) ~> f
absurdR = forall {k} (f :: k -> *) (a :: k) r (g :: k -> *).
(f a -> r) -> (g a -> r) -> (+) f g a -> r
caseF forall a. a -> a
id \case {}
{-# INLINE absurdR #-}
swapSum :: (f + g) a -> (g + f) a
swapSum :: forall {k} (f :: k -> *) (g :: k -> *) (a :: k).
(+) f g a -> (+) g f a
swapSum = forall {k} (f :: k -> *) (a :: k) r (g :: k -> *).
(f a -> r) -> (g a -> r) -> (+) f g a -> r
caseF forall k (f :: k -> *) (g :: k -> *) (p :: k). g p -> (:+:) f g p
R1 forall k (f :: k -> *) (g :: k -> *) (p :: k). f p -> (:+:) f g p
L1
{-# INLINE swapSum #-}