strongweak
Safe HaskellNone
LanguageGHC2021

Strongweak.Chain

Synopsis

Documentation

newtype SWChain (n :: Natural) a Source #

When weakening (or strengthening), chain the operation n times.

You may achieve this without extra newtypes by nesting uses of SW. However, strongweak generics can't handle this, forcing you to write manual instances.

SWChain provides this nesting behaviour in a type. In return for adding a boring newtype layer to the strong representation, you can chain weakening and strengthenings without having to write them manually.

The type works as follows:

Weakened (SWChain 0 a) = a
Weakened (SWChain 1 a) = Weakened a
Weakened (SWChain 2 a) = Weakened (Weakened a)
Weakened (SWChain n a) = WeakenedN n a

And so on. (This type is only much use from n = 2 onwards.)

You may also use this as a "via" type:

newtype A (s :: Strength) = A { a1 :: SW s (Identity (SW s Word8)) }
deriving via SWChain 2 (Identity Word8) instance     Weaken (A Strong)
deriving via SWChain 2 (Identity Word8) instance Strengthen (A Strong)

Constructors

SWChain 

Fields

Instances

Instances details
Show a => Show (SWChain n a) Source # 
Instance details

Defined in Strongweak.Chain

Methods

showsPrec :: Int -> SWChain n a -> ShowS #

show :: SWChain n a -> String #

showList :: [SWChain n a] -> ShowS #

Eq a => Eq (SWChain n a) Source # 
Instance details

Defined in Strongweak.Chain

Methods

(==) :: SWChain n a -> SWChain n a -> Bool #

(/=) :: SWChain n a -> SWChain n a -> Bool #

Ord a => Ord (SWChain n a) Source # 
Instance details

Defined in Strongweak.Chain

Methods

compare :: SWChain n a -> SWChain n a -> Ordering #

(<) :: SWChain n a -> SWChain n a -> Bool #

(<=) :: SWChain n a -> SWChain n a -> Bool #

(>) :: SWChain n a -> SWChain n a -> Bool #

(>=) :: SWChain n a -> SWChain n a -> Bool #

max :: SWChain n a -> SWChain n a -> SWChain n a #

min :: SWChain n a -> SWChain n a -> SWChain n a #

StrengthenN n a => Strengthen (SWChain n a) Source # 
Instance details

Defined in Strongweak.Chain

WeakenN n a => Weaken (SWChain n a) Source # 
Instance details

Defined in Strongweak.Chain

Associated Types

type Weakened (SWChain n a) 
Instance details

Defined in Strongweak.Chain

type Weakened (SWChain n a) = WeakenedN n a

Methods

weaken :: SWChain n a -> Weakened (SWChain n a) Source #

type Weakened (SWChain n a) Source # 
Instance details

Defined in Strongweak.Chain

type Weakened (SWChain n a) = WeakenedN n a