strongweak
Safe HaskellNone
LanguageGHC2021

Strongweak.Weaken

Synopsis

Documentation

class Weaken a where Source #

Weaken some a, relaxing certain invariants.

See Strongweak for class design notes and laws.

Associated Types

type Weakened a Source #

The weakened type for some type.

Methods

weaken :: a -> Weakened a Source #

Weaken some a to its associated weak type Weakened a.

Instances

Instances details
Weaken Int16 Source # 
Instance details

Defined in Strongweak.Weaken

Associated Types

type Weakened Int16 
Instance details

Defined in Strongweak.Weaken

Weaken Int32 Source # 
Instance details

Defined in Strongweak.Weaken

Associated Types

type Weakened Int32 
Instance details

Defined in Strongweak.Weaken

Weaken Int64 Source # 
Instance details

Defined in Strongweak.Weaken

Associated Types

type Weakened Int64 
Instance details

Defined in Strongweak.Weaken

Weaken Int8 Source # 
Instance details

Defined in Strongweak.Weaken

Associated Types

type Weakened Int8 
Instance details

Defined in Strongweak.Weaken

Weaken Word16 Source # 
Instance details

Defined in Strongweak.Weaken

Associated Types

type Weakened Word16 
Instance details

Defined in Strongweak.Weaken

Weaken Word32 Source # 
Instance details

Defined in Strongweak.Weaken

Associated Types

type Weakened Word32 
Instance details

Defined in Strongweak.Weaken

Weaken Word64 Source # 
Instance details

Defined in Strongweak.Weaken

Associated Types

type Weakened Word64 
Instance details

Defined in Strongweak.Weaken

Weaken Word8 Source # 
Instance details

Defined in Strongweak.Weaken

Associated Types

type Weakened Word8 
Instance details

Defined in Strongweak.Weaken

Weaken (Identity a) Source # 
Instance details

Defined in Strongweak.Weaken

Associated Types

type Weakened (Identity a) 
Instance details

Defined in Strongweak.Weaken

Weaken (NonEmpty a) Source #

Weaken non-empty lists into plain lists.

Instance details

Defined in Strongweak.Weaken

Associated Types

type Weakened (NonEmpty a) 
Instance details

Defined in Strongweak.Weaken

type Weakened (NonEmpty a) = [a]
(Generic (f 'Strong), Generic (f 'Weak), GWeaken (Rep (f 'Strong)) (Rep (f 'Weak))) => Weaken (GenericallySW0 f) Source # 
Instance details

Defined in Strongweak.Generic

Associated Types

type Weakened (GenericallySW0 f) 
Instance details

Defined in Strongweak.Generic

Weaken (SWCoercibly a) Source # 
Instance details

Defined in Strongweak.Weaken

Associated Types

type Weakened (SWCoercibly a) 
Instance details

Defined in Strongweak.Weaken

type Weakened (SWCoercibly a) = a
Weaken a => Weaken [a] Source #

Decomposer. Weaken every element in a list.

Instance details

Defined in Strongweak.Weaken

Associated Types

type Weakened [a] 
Instance details

Defined in Strongweak.Weaken

type Weakened [a] = [Weakened a]

Methods

weaken :: [a] -> Weakened [a] Source #

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

Decomposer. Weaken either side of an Either.

Instance details

Defined in Strongweak.Weaken

Associated Types

type Weakened (Either a b) 
Instance details

Defined in Strongweak.Weaken

type Weakened (Either a b) = Either (Weakened a) (Weakened b)

Methods

weaken :: Either a b -> Weakened (Either a b) Source #

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 #

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

Defined in Strongweak.Generic

Associated Types

type Weakened (GenericallySW s w) 
Instance details

Defined in Strongweak.Generic

type Weakened (GenericallySW s w) = w
(Weaken a, Weaken b) => Weaken (a, b) Source #

Decomposer. Weaken both elements of a tuple.

Instance details

Defined in Strongweak.Weaken

Associated Types

type Weakened (a, b) 
Instance details

Defined in Strongweak.Weaken

type Weakened (a, b) = (Weakened a, Weakened b)

Methods

weaken :: (a, b) -> Weakened (a, b) Source #

Weaken (Const a b) Source # 
Instance details

Defined in Strongweak.Weaken

Associated Types

type Weakened (Const a b) 
Instance details

Defined in Strongweak.Weaken

Methods

weaken :: Const a b -> Weakened (Const a b) Source #

Weaken (Refined p a) Source #

Strip refined type refinement.

Instance details

Defined in Strongweak.Weaken

Associated Types

type Weakened (Refined p a) 
Instance details

Defined in Strongweak.Weaken

type Weakened (Refined p a) = a

Methods

weaken :: Refined p a -> Weakened (Refined p a) Source #

Vector v a => Weaken (Vector v n a) Source #

Weaken sized vectors into plain lists.

Instance details

Defined in Strongweak.Weaken

Associated Types

type Weakened (Vector v n a) 
Instance details

Defined in Strongweak.Weaken

type Weakened (Vector v n a) = [a]

Methods

weaken :: Vector v n a -> Weakened (Vector v n a) Source #

Weaken (Refined1 p f a) Source #

Strip refined functor type refinement.

Instance details

Defined in Strongweak.Weaken

Associated Types

type Weakened (Refined1 p f a) 
Instance details

Defined in Strongweak.Weaken

type Weakened (Refined1 p f a) = f a

Methods

weaken :: Refined1 p f a -> Weakened (Refined1 p f a) Source #

type family WeakenedN (n :: Natural) a where ... Source #

The type of a after weakening n times.

Equations

WeakenedN 0 a = a 
WeakenedN n a = Weakened (WeakenedN (n - 1) a) 

class WeakenN (n :: Natural) a where Source #

Methods

weakenN :: a -> WeakenedN n a Source #

Instances

Instances details
(Weaken a, WeakenN (n - 1) (Weakened a)) => WeakenN n a Source #

Inductive case. n /= 0, else this explodes.

Instance details

Defined in Strongweak.Weaken

Methods

weakenN :: a -> WeakenedN n a Source #

WeakenN 0 a Source #

Zero case: return the value as-is.

Instance details

Defined in Strongweak.Weaken

Methods

weakenN :: a -> WeakenedN 0 a Source #

liftWeakF :: Weaken a => (Weakened a -> b) -> a -> b Source #

Lift a function on a weak type to the associated strong type by weakening first.

newtype SWCoercibly a Source #

A "via type" newtype for defining strongweak instances for zero-invariant, coercible newtypes.

Use like so:

deriving Weaken via SWCoercibly a

Or standalone:

via SWCoercibly a instance Weaken (Identity a)

Note that usage of this incurs UndecidableInstances. That's life. You can write the trivial instances this generates yourself if you so wish.

Constructors

SWCoercibly 

Fields

Instances

Instances details
Strengthen (SWCoercibly a) Source # 
Instance details

Defined in Strongweak.Strengthen

UnsafeStrengthen (SWCoercibly a) Source # 
Instance details

Defined in Strongweak.Strengthen.Unsafe

Weaken (SWCoercibly a) Source # 
Instance details

Defined in Strongweak.Weaken

Associated Types

type Weakened (SWCoercibly a) 
Instance details

Defined in Strongweak.Weaken

type Weakened (SWCoercibly a) = a
type Weakened (SWCoercibly a) Source # 
Instance details

Defined in Strongweak.Weaken

type Weakened (SWCoercibly a) = a