strongweak-0.6.0: Convert between strong and weak representations of types
Safe HaskellSafe-Inferred
LanguageGHC2021

Strongweak.Generic.Via

Synopsis

Documentation

newtype GenericallySW s (w :: Type) Source #

DerivingVia wrapper for strongweak instances.

We can't use Generically conveniently because we need to talk about two data types, not one -- we would have to do something like Generically (Tagged w s), which is ugly. So we instead define our own adorable little "via type" here!

Use like so:

data XYZ (s :: Strength) = XYZ
  { xyz1 :: SW s Word8
  , xyz2 :: Word8
  , xyz3 :: ()
  } deriving stock Generic
deriving via (GenericallySW (XYZ 'Strong) (XYZ 'Weak)) instance Weaken (XYZ 'Strong)
deriving via (GenericallySW (XYZ 'Strong) (XYZ 'Weak)) instance Strengthen (XYZ 'Strong)

TODO can't figure out a way around multiple standalone deriving declarations :(

Constructors

GenericallySW 

Fields

Instances

Instances details
(Generic s, Generic w, GStrengthenD (Rep w) (Rep s), Weaken (GenericallySW s w)) => Strengthen (GenericallySW s w) Source # 
Instance details

Defined in Strongweak.Generic.Via

(Generic s, Generic w, GWeaken (Rep s) (Rep w)) => Weaken (GenericallySW s w) Source # 
Instance details

Defined in Strongweak.Generic.Via

Associated Types

type Weak (GenericallySW s w) Source #

type Weak (GenericallySW s w) Source # 
Instance details

Defined in Strongweak.Generic.Via

type Weak (GenericallySW s w) = w