Safe Haskell | None |
---|---|
Language | Haskell2010 |
Numeric.Data.NonZero
Contents
Description
Provides the NonZero
type for enforcing a non-zero invariant.
Since: 0.1
Synopsis
- data NonZero a where
- mkNonZero :: (AMonoid a, Eq a) => a -> Either String (NonZero a)
- mkNonZeroTH :: (AMonoid a, Eq a, Lift a) => a -> Code Q (NonZero a)
- unsafeNonZero :: (AMonoid a, Eq a, HasCallStack) => a -> NonZero a
- reallyUnsafeNonZero :: a -> NonZero a
- unNonZero :: NonZero a -> a
- _MkNonZero :: (AMonoid a, Eq a) => ReversedPrism' (NonZero a) a
- rmatching :: (Is (ReversedOptic k) An_AffineTraversal, ReversibleOptic k) => Optic k NoIx b a t s -> s -> Either t a
Type
Smart-constructor for creating a "non-zero" a
.
Since: 0.1
Bundled Patterns
pattern MkNonZero :: a -> NonZero a | Unidirectional pattern synonym for Since: 0.1 |
Instances
Foldable NonZero Source # | Since: 0.1 | ||||
Defined in Numeric.Data.NonZero.Internal Methods fold :: Monoid m => NonZero m -> m # foldMap :: Monoid m => (a -> m) -> NonZero a -> m # foldMap' :: Monoid m => (a -> m) -> NonZero a -> m # foldr :: (a -> b -> b) -> b -> NonZero a -> b # foldr' :: (a -> b -> b) -> b -> NonZero a -> b # foldl :: (b -> a -> b) -> b -> NonZero a -> b # foldl' :: (b -> a -> b) -> b -> NonZero a -> b # foldr1 :: (a -> a -> a) -> NonZero a -> a # foldl1 :: (a -> a -> a) -> NonZero a -> a # elem :: Eq a => a -> NonZero a -> Bool # maximum :: Ord a => NonZero a -> a # minimum :: Ord a => NonZero a -> a # | |||||
HasField "unNonZero" (NonZero a) a Source # | Since: 0.1 | ||||
Defined in Numeric.Data.NonZero.Internal | |||||
(k ~ A_Getter, x ~ a, y ~ a) => LabelOptic "unNonZero" k (NonZero a) (NonZero a) x y Source # | Since: 0.1 | ||||
Defined in Numeric.Data.NonZero.Internal | |||||
Lift a => Lift (NonZero a :: Type) Source # | Since: 0.1 | ||||
MetricSpace a => MetricSpace (NonZero a) Source # | Since: 0.1 | ||||
MEuclidean a => MEuclidean (NonZero a) Source # | Since: 0.1 | ||||
MGroup a => MGroup (NonZero a) Source # | Since: 0.1 | ||||
MMonoid a => MMonoid (NonZero a) Source # | Since: 0.1 | ||||
Defined in Numeric.Data.NonZero.Internal | |||||
MSemigroup a => MSemigroup (NonZero a) Source # | Since: 0.1 | ||||
Normed a => Normed (NonZero a) Source # | Since: 0.1 | ||||
(AMonoid a, Eq a, FromInteger a) => FromInteger (NonZero a) Source # | WARNING: Partial Since: 0.1 | ||||
(AMonoid a, Eq a, FromRational a) => FromRational (NonZero a) Source # | WARNING: Partial Since: 0.1 | ||||
(AMonoid a, Eq a, FromReal a) => FromReal (NonZero a) Source # | WARNING: Partial Since: 0.1 | ||||
ToInteger a => ToInteger (NonZero a) Source # | Since: 0.1 | ||||
ToRational a => ToRational (NonZero a) Source # | Since: 0.1 | ||||
ToReal a => ToReal (NonZero a) Source # | Since: 0.1 | ||||
NFData a => NFData (NonZero a) Source # | Since: 0.1.0.0 | ||||
Defined in Numeric.Data.NonZero.Internal | |||||
Generic (NonZero a) Source # | |||||
Defined in Numeric.Data.NonZero.Internal Associated Types
| |||||
Show a => Show (NonZero a) Source # | Since: 0.1 | ||||
Eq a => Eq (NonZero a) Source # | Since: 0.1 | ||||
Ord a => Ord (NonZero a) Source # | Since: 0.1 | ||||
Hashable a => Hashable (NonZero a) Source # | Since: 0.1.0.0 | ||||
Show a => Display (NonZero a) Source # | Since: 0.1 | ||||
Defined in Numeric.Data.NonZero.Internal | |||||
type Rep (NonZero a) Source # | Since: 0.1 | ||||
Defined in Numeric.Data.NonZero.Internal |
Creation
mkNonZero :: (AMonoid a, Eq a) => a -> Either String (NonZero a) Source #
Smart constructor for NonZero
.
Examples
>>>
mkNonZero 7
Right (UnsafeNonZero 7)
>>>
mkNonZero 0
Left "Numeric.Data.NonZero: Received zero"
Since: 0.1
unsafeNonZero :: (AMonoid a, Eq a, HasCallStack) => a -> NonZero a Source #
Throws an error when given 0.
WARNING: Partial
Examples
>>>
unsafeNonZero 7
UnsafeNonZero 7
Since: 0.1
reallyUnsafeNonZero :: a -> NonZero a Source #
This function is an alias for the unchecked constructor UnsafeNonZero
i.e. it allows us to construct a NonZero
without checking the
invariant. This is intended only for when we absolutely know the invariant
holds and a branch (i.e. unsafeNonZero
) is undesirable for
performance reasons. Exercise extreme caution.
Since: 0.1
Elimination
Optics
We provide a ReversedPrism'
_MkNonZero
that allows for total
elimination and partial construction, along with a LabelOptic
Getter
for #unNonZero
.
Examples
>>>
:set -XOverloadedLabels
>>>
import Optics.Core (view)
>>>
let n = $$(mkNonZeroTH 7)
>>>
view #unNonZero n
7
_MkNonZero :: (AMonoid a, Eq a) => ReversedPrism' (NonZero a) a Source #
ReversedPrism'
that enables total elimination and partial construction.
Examples
>>>
import Optics.Core (view)
>>>
nz = $$(mkNonZeroTH 7)
>>>
view _MkNonZero nz
7
>>>
rmatching _MkNonZero 3
Right (UnsafeNonZero 3)
>>>
rmatching _MkNonZero 0
Left 0
Since: 0.1
rmatching :: (Is (ReversedOptic k) An_AffineTraversal, ReversibleOptic k) => Optic k NoIx b a t s -> s -> Either t a Source #
Reversed matching
. Useful with smart-constructor optics.
Since: 0.1