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

Strongweak.Strengthen

Synopsis

Strengthen class

class Weaken a => Strengthen a where Source #

Attempt to strengthen some Weak a, asserting certain invariants.

We take Weaken as a superclass in order to maintain strong/weak type pair consistency. We choose this dependency direction because we treat the strong type as the "canonical" one, so Weaken is the more natural (and straightforward) class to define. That does mean the instances for this class are a little confusingly worded. Alas.

See Strongweak for class design notes and laws.

Methods

strengthen :: Weak a -> Result a Source #

Attempt to strengthen some Weak a to its associated strong type a.

Instances

Instances details
Strengthen Int16 Source # 
Instance details

Defined in Strongweak.Strengthen

Strengthen Int32 Source # 
Instance details

Defined in Strongweak.Strengthen

Strengthen Int64 Source # 
Instance details

Defined in Strongweak.Strengthen

Strengthen Int8 Source # 
Instance details

Defined in Strongweak.Strengthen

Strengthen Word16 Source # 
Instance details

Defined in Strongweak.Strengthen

Strengthen Word32 Source # 
Instance details

Defined in Strongweak.Strengthen

Strengthen Word64 Source # 
Instance details

Defined in Strongweak.Strengthen

Strengthen Word8 Source # 
Instance details

Defined in Strongweak.Strengthen

Strengthen (Identity a) Source #

Add wrapper.

Instance details

Defined in Strongweak.Strengthen

Strengthen (NonEmpty a) Source #

Strengthen a plain list into a non-empty list by asserting non-emptiness.

Instance details

Defined in Strongweak.Strengthen

Strengthen a => Strengthen [a] Source #

Decomposer. Strengthen every element in a list.

Instance details

Defined in Strongweak.Strengthen

Methods

strengthen :: Weak [a] -> Result [a] Source #

(Strengthen a, Strengthen b) => Strengthen (Either a b) Source #

Decomposer. Strengthen either side of an Either.

Instance details

Defined in Strongweak.Strengthen

Methods

strengthen :: Weak (Either a b) -> Result (Either a b) Source #

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

Defined in Strongweak.Generic

(Strengthen l, Strengthen r) => Strengthen (l, r) Source #

Decomposer. Strengthen both elements of a tuple.

Instance details

Defined in Strongweak.Strengthen

Methods

strengthen :: Weak (l, r) -> Result (l, r) Source #

Strengthen (Const a b) Source #

Add wrapper.

Instance details

Defined in Strongweak.Strengthen

Methods

strengthen :: Weak (Const a b) -> Result (Const a b) Source #

Refine p a => Strengthen (Refined p a) Source #

Strengthen a type by refining it with a predicate.

Instance details

Defined in Strongweak.Strengthen

Methods

strengthen :: Weak (Refined p a) -> Result (Refined p a) Source #

(Vector v a, KnownNat n) => Strengthen (Vector v n a) Source #

Strengthen a plain list into a sized vector by asserting length.

Instance details

Defined in Strongweak.Strengthen

Methods

strengthen :: Weak (Vector v n a) -> Result (Vector v n a) Source #

Refine1 p f => Strengthen (Refined1 p f a) Source #

Strengthen a type by refining it with a functor predicate.

Instance details

Defined in Strongweak.Strengthen

Methods

strengthen :: Weak (Refined1 p f a) -> Result (Refined1 p f a) Source #

restrengthen :: (Strengthen a, Weaken a) => a -> Result a Source #

Weaken a strong value, then strengthen it again.

Potentially useful if you have previously used unsafeStrengthen and now wish to check the invariants. For example:

>>> restrengthen $ unsafeStrengthen @(Vector 2 Natural) [0]
Failure ...

Helpers

strengthenBounded :: forall m n. (Typeable n, Integral n, Show n, Typeable m, Integral m, Bounded m, FiniteBits m) => n -> Result m Source #

Strengthen one numeric type into another.

n must be "wider" than m.

FiniteBits m and Show n are for error printing. We're forced to Show n because linear-text-builder can't print unbounded integrals. PR: https://github.com/Bodigrim/linear-builder/pull/20

Strengthen failures

data StrengthenFailure Source #

A failure encountered during strengthening.

Constructors

StrengthenFailure 

Fields

Instances

Instances details
Show StrengthenFailure Source # 
Instance details

Defined in Strongweak.Strengthen

Re-exports

type family Weak a :: Type Source #

The weakened type for some type.

Instances

Instances details
type Weak Int16 Source # 
Instance details

Defined in Strongweak.Weaken

type Weak Int32 Source # 
Instance details

Defined in Strongweak.Weaken

type Weak Int64 Source # 
Instance details

Defined in Strongweak.Weaken

type Weak Int8 Source # 
Instance details

Defined in Strongweak.Weaken

type Weak Word16 Source # 
Instance details

Defined in Strongweak.Weaken

type Weak Word32 Source # 
Instance details

Defined in Strongweak.Weaken

type Weak Word64 Source # 
Instance details

Defined in Strongweak.Weaken

type Weak Word8 Source # 
Instance details

Defined in Strongweak.Weaken

type Weak (Identity a) Source # 
Instance details

Defined in Strongweak.Weaken

type Weak (Identity a) = a
type Weak (NonEmpty a) Source # 
Instance details

Defined in Strongweak.Weaken

type Weak (NonEmpty a) = [a]
type Weak [a] Source # 
Instance details

Defined in Strongweak.Weaken

type Weak [a] = [Weak a]
type Weak (Either a b) Source # 
Instance details

Defined in Strongweak.Weaken

type Weak (Either a b) = Either (Weak a) (Weak b)
type Weak (GenericallySW s w) Source # 
Instance details

Defined in Strongweak.Generic

type Weak (GenericallySW s w) = w
type Weak (a, b) Source # 
Instance details

Defined in Strongweak.Weaken

type Weak (a, b) = (Weak a, Weak b)
type Weak (Const a b) Source # 
Instance details

Defined in Strongweak.Weaken

type Weak (Const a b) = a
type Weak (Refined p a) Source # 
Instance details

Defined in Strongweak.Weaken

type Weak (Refined p a) = a
type Weak (Vector v n a) Source # 
Instance details

Defined in Strongweak.Weaken

type Weak (Vector v n a) = [a]
type Weak (Refined1 p f a) Source # 
Instance details

Defined in Strongweak.Weaken

type Weak (Refined1 p f a) = f a