strongweak-0.11.0: Convert between strong and weak representations of types
Safe HaskellNone
LanguageGHC2021

Strongweak.WeakenN

Synopsis

Documentation

newtype WeakenN (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.

WeakenN 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 (WeakenN 0 a) = a
Weakened (WeakenN 1 a) = Weakened a
Weakened (WeakenN 2 a) = Weakened (Weakened a)
Weakened (WeakenN n a) = WeakenedN n a

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

Constructors

WeakenN 

Fields

Instances

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

Defined in Strongweak.WeakenN

Methods

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

show :: WeakenN n a -> String #

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

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

Defined in Strongweak.WeakenN

Methods

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

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

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

Defined in Strongweak.WeakenN

Methods

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

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

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

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

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

max :: WeakenN n a -> WeakenN n a -> WeakenN n a #

min :: WeakenN n a -> WeakenN n a -> WeakenN n a #

StrengthenWeakenN n a => Strengthen (WeakenN n a) Source # 
Instance details

Defined in Strongweak.WeakenN

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

Defined in Strongweak.WeakenN

Associated Types

type Weakened (WeakenN n a) 
Instance details

Defined in Strongweak.WeakenN

type Weakened (WeakenN n a) = WeakenedN n a

Methods

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

type Weakened (WeakenN n a) Source # 
Instance details

Defined in Strongweak.WeakenN

type Weakened (WeakenN n a) = WeakenedN n a