| Safe Haskell | None |
|---|---|
| Language | GHC2021 |
Strongweak.Chain
Synopsis
- newtype SWChain (n :: Natural) a = SWChain {
- unSWChain :: a
- strengthenN :: StrengthenN n a => WeakenedN n a -> Either StrengthenFailure' a
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(SWChain0 a) = aWeakened(SWChain1 a) =WeakenedaWeakened(SWChain2 a) =Weakened(Weakeneda)Weakened(SWChainn a) =WeakenedNn 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 ::SWs (Identity (SWs Word8)) } deriving viaSWChain2 (Identity Word8) instanceWeaken(AStrong) deriving viaSWChain2 (Identity Word8) instanceStrengthen(AStrong)
Instances
| Show a => Show (SWChain n a) Source # | |
| Eq a => Eq (SWChain n a) Source # | |
| Ord a => Ord (SWChain n a) Source # | |
Defined in Strongweak.Chain | |
| StrengthenN n a => Strengthen (SWChain n a) Source # | |
Defined in Strongweak.Chain Methods strengthen :: Weakened (SWChain n a) -> Either StrengthenFailure' (SWChain n a) Source # | |
| WeakenN n a => Weaken (SWChain n a) Source # | |
| type Weakened (SWChain n a) Source # | |
Defined in Strongweak.Chain | |
strengthenN :: StrengthenN n a => WeakenedN n a -> Either StrengthenFailure' a Source #