Safe Haskell | Safe-Inferred |
---|---|
Language | GHC2021 |
Synopsis
- class Weaken a => Strengthen a where
- strengthen :: Weak a -> Validation (NonEmpty StrengthenFail) a
- data StrengthenFail
- strengthenFailPretty :: NonEmpty StrengthenFail -> Doc a
- strengthenFailBase :: forall s w. (Typeable w, Show w, Typeable s) => w -> String -> Validation (NonEmpty StrengthenFail) s
- restrengthen :: (Strengthen a, Weaken a) => a -> Validation (NonEmpty StrengthenFail) a
- strengthenBounded :: forall b n. (Integral b, Bounded b, Show b, Typeable b, Integral n, Show n, Typeable n) => n -> Validation (NonEmpty StrengthenFail) b
- type family Weak a :: Type
Strengthen
class
class Weaken a => Strengthen a where Source #
You may attempt to transform a
to an Weak
aa
.
Laws:
a === b ->
strengthen
a ===strengthen
bstrengthen
(weaken
a) ===Success
a
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.
strengthen :: Weak a -> Validation (NonEmpty StrengthenFail) a Source #
Attempt to transform a weak value to its associated strong one.
Instances
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.
Instances
Show StrengthenFail Source # | |
Defined in Strongweak.Strengthen showsPrec :: Int -> StrengthenFail -> ShowS # show :: StrengthenFail -> String # showList :: [StrengthenFail] -> ShowS # | |
Eq StrengthenFail Source # | |
Defined in Strongweak.Strengthen (==) :: StrengthenFail -> StrengthenFail -> Bool # (/=) :: StrengthenFail -> StrengthenFail -> Bool # | |
Pretty StrengthenFail Source # | |
Defined in Strongweak.Strengthen pretty :: StrengthenFail -> Doc ann # prettyList :: [StrengthenFail] -> Doc ann # |
strengthenFailPretty :: NonEmpty StrengthenFail -> Doc a Source #
strengthenFailBase :: forall s w. (Typeable w, Show w, Typeable s) => w -> String -> Validation (NonEmpty StrengthenFail) s Source #
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
strengthenBounded :: forall b n. (Integral b, Bounded b, Show b, Typeable b, Integral n, Show n, Typeable n) => n -> Validation (NonEmpty StrengthenFail) b Source #
Re-exports
type family Weak a :: Type Source #
The type to weaken to.
Instances
type Weak Int16 Source # | |
Defined in Strongweak.Weaken | |
type Weak Int32 Source # | |
Defined in Strongweak.Weaken | |
type Weak Int64 Source # | |
Defined in Strongweak.Weaken | |
type Weak Int8 Source # | |
Defined in Strongweak.Weaken | |
type Weak Word16 Source # | |
Defined in Strongweak.Weaken | |
type Weak Word32 Source # | |
Defined in Strongweak.Weaken | |
type Weak Word64 Source # | |
Defined in Strongweak.Weaken | |
type Weak Word8 Source # | |
Defined in Strongweak.Weaken | |
type Weak (Identity a) Source # | |
Defined in Strongweak.Weaken | |
type Weak (NonEmpty a) Source # | |
Defined in Strongweak.Weaken | |
type Weak (Maybe a) Source # | |
Defined in Strongweak.Weaken | |
type Weak [a] Source # | |
Defined in Strongweak.Weaken | |
type Weak (Either a b) Source # | |
type Weak (Vector n a) Source # | |
Defined in Strongweak.Weaken | |
type Weak (a, b) Source # | |
Defined in Strongweak.Weaken | |
type Weak (Const a b) Source # | |
Defined in Strongweak.Weaken | |
type Weak (Refined p a) Source # | |
Defined in Strongweak.Weaken |