{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE UndecidableInstances #-}
{-# OPTIONS_GHC -Wno-orphans #-}

module GHC.Generics.Orphans where

import GHC.Generics ( Generic1(..), Generically1(..) )

instance (Generic1 t, Foldable (Rep1 t)) => Foldable (Generically1 t) where
  foldMap :: forall m a. Monoid m => (a -> m) -> Generically1 t a -> m
foldMap a -> m
f (Generically1 t a
ta) = (a -> m) -> Rep1 t a -> m
forall m a. Monoid m => (a -> m) -> Rep1 t a -> m
forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap a -> m
f (t a -> Rep1 t a
forall a. t a -> Rep1 t a
forall k (f :: k -> *) (a :: k). Generic1 f => f a -> Rep1 f a
from1 t a
ta)

instance (Generic1 t, Traversable (Rep1 t)) => Traversable (Generically1 t) where
  traverse :: forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> Generically1 t a -> f (Generically1 t b)
traverse a -> f b
f (Generically1 t a
ta) = t b -> Generically1 t b
forall {k} (f :: k -> *) (a :: k). f a -> Generically1 f a
Generically1 (t b -> Generically1 t b)
-> (Rep1 t b -> t b) -> Rep1 t b -> Generically1 t b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Rep1 t b -> t b
forall a. Rep1 t a -> t a
forall k (f :: k -> *) (a :: k). Generic1 f => Rep1 f a -> f a
to1 (Rep1 t b -> Generically1 t b)
-> f (Rep1 t b) -> f (Generically1 t b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (a -> f b) -> Rep1 t a -> f (Rep1 t b)
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> Rep1 t a -> f (Rep1 t b)
traverse a -> f b
f (t a -> Rep1 t a
forall a. t a -> Rep1 t a
forall k (f :: k -> *) (a :: k). Generic1 f => f a -> Rep1 f a
from1 t a
ta)