{-# LANGUAGE DeriveGeneric, DataKinds, DerivingVia, KindSignatures, TypeOperators #-} module Main (main) where import DerivingViaFun import Data.Monoid (Sum(..), Any(..)) import GHC.Generics (Generic) data T0 = T0 Int Bool deriving Generic deriving (Eq, Ord) via Fun (T0 ?-> (Int, Bool)) deriving (Semigroup, Monoid) via Fun (GenericIso :: T0 ~> (Sum Int, Any)) -- test type annotations in deriving via newtype All = All Bool deriving (Eq, Ord) via Fun (Coerce All Bool) deriving (Semigroup, Monoid) via Fun (Coerce All Bool >>> Not >>> Coerce Bool Any) main :: IO () main = pure ()