strongweak-0.3.1: Convert between strong and weak representations of types
Safe HaskellSafe-Inferred
LanguageHaskell2010

Strongweak.Strengthen

Synopsis

Strengthen class

class Weaken a => Strengthen a where Source #

You may attempt to transform a Weak a to an a.

Laws:

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.

Instances should either handle an invariant, or decompose. See Strongweak for a discussion on this design.

Methods

strengthen :: Weak a -> Validation (NonEmpty StrengthenFail) a Source #

Attempt to transform a weak value to its associated strong one.

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 a => Strengthen (Identity a) Source #

Decomposer.

Instance details

Defined in Strongweak.Strengthen

(Typeable a, Show a) => Strengthen (NonEmpty a) Source #

Obtain a non-empty list by asserting non-emptiness of a plain list.

Instance details

Defined in Strongweak.Strengthen

Strengthen a => Strengthen (Maybe a) Source #

Decomposer.

Instance details

Defined in Strongweak.Strengthen

Strengthen a => Strengthen [a] Source #

Decomposer. Strengthen every element in a list.

Instance details

Defined in Strongweak.Strengthen

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

Decomposer.

Instance details

Defined in Strongweak.Strengthen

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

Obtain a sized vector by asserting the size of a plain list.

Instance details

Defined in Strongweak.Strengthen

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

Decomposer.

Instance details

Defined in Strongweak.Strengthen

Strengthen a => Strengthen (Const a b) Source #

Decomposer.

Instance details

Defined in Strongweak.Strengthen

(Predicate p a, Typeable k, Typeable a, Show a) => Strengthen (Refined p a) Source #

Obtain a refined type by applying its associated refinement.

Instance details

Defined in Strongweak.Strengthen

Strengthen failures

data StrengthenFail Source #

Strengthen failure data type. Don't use these constructors directly, use the existing helper functions.

Field indices are from 0 in the respective constructor. Field names are provided if present.

Constructors

StrengthenFailBase 

Fields

StrengthenFailField 

Fields

Instances

Instances details
Show StrengthenFail Source # 
Instance details

Defined in Strongweak.Strengthen

Eq StrengthenFail Source # 
Instance details

Defined in Strongweak.Strengthen

Pretty StrengthenFail Source # 
Instance details

Defined in Strongweak.Strengthen

Methods

pretty :: StrengthenFail -> Doc ann #

prettyList :: [StrengthenFail] -> Doc ann #

Restrengthening

restrengthen :: (Strengthen a, Weaken a) => a -> Validation (NonEmpty StrengthenFail) 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

Re-exports

type family Weak a :: Type Source #

The type to weaken to.

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) = Identity (Weak a)
type Weak (NonEmpty a) Source # 
Instance details

Defined in Strongweak.Weaken

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

Defined in Strongweak.Weaken

type Weak (Maybe a) = Maybe (Weak 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 (Vector n a) Source # 
Instance details

Defined in Strongweak.Weaken

type Weak (Vector n a) = [a]
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) = Const (Weak a) b
type Weak (Refined p a) Source # 
Instance details

Defined in Strongweak.Weaken

type Weak (Refined p a) = a