packages feed

haskell-src-exts-1.24.0: tests/examples/DerivingVia2.hs.prettyprinter.golden

{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE DerivingVia #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE StandaloneDeriving #-}
module DerivingVia2 where
import Control.Applicative
import Data.Functor.Compose
import Data.Proxy
import Data.Semigroup

newtype App (f :: * -> *) a = App (f a)
                                deriving newtype (Functor, Applicative)

instance (Applicative f, Semigroup a) => Semigroup (App f a) where
        (<>) = liftA2 (<>)

deriving via (App (Compose (f :: * -> *) g) a) instance
         (Applicative f, Applicative g, Semigroup a) =>
         Semigroup (Compose f g a)

class C (a :: k -> *)

instance C Proxy

newtype MyProxy a = MyProxy (Proxy a)

deriving via (Proxy :: * -> *) instance C MyProxy

class Z a b

data T a

data X1 a

data X2 a

data X3 a

deriving via (forall a . T a) instance Z a (X1 b)

deriving via (T a) instance forall b . Z a (X2 b)

deriving via (forall a . T a) instance forall b . Z a (X3 b)