Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Refined.Unsafe
Description
This module exposes unsafe refinements. An unsafe refinement
is one which either does not make the guarantee of totality in construction
of the Refined
value or does not perform a check of the refinement
predicate. It is recommended only to use this when you can manually prove
that the refinement predicate holds.
Synopsis
- data Refined (p :: k) x
- data Refined1 (p :: k) f x
- reallyUnsafeRefine :: x -> Refined p x
- reallyUnsafeRefine1 :: f x -> Refined1 p f x
- unsafeRefine :: Predicate p x => x -> Refined p x
- reallyUnsafeUnderlyingRefined :: Coercion x (Refined p x)
- reallyUnsafeAllUnderlyingRefined :: ((forall x y p. Coercible x y => Coercible y (Refined p x)) => r) -> r
- reallyUnsafePredEquiv :: Coercion (Refined p x) (Refined q x)
Refined
data Refined (p :: k) x Source #
A refinement type, which wraps a value of type x
.
Since: 0.1.0.0
Instances
data Refined1 (p :: k) f x Source #
A refinement type, which wraps a value of type f x
.
The predicate is applied over the functor f
. Thus, we may safely recover
various Functor
y instances, because no matter what you do to the
values inside the functor, the predicate may not be invalidated.
Instances
Lift (f a) => Lift (Refined1 p f a :: Type) Source # | |
Foldable f => Foldable (Refined1 p f) Source # | |
Defined in Refined.Unsafe.Type Methods fold :: Monoid m => Refined1 p f m -> m Source # foldMap :: Monoid m => (a -> m) -> Refined1 p f a -> m Source # foldMap' :: Monoid m => (a -> m) -> Refined1 p f a -> m Source # foldr :: (a -> b -> b) -> b -> Refined1 p f a -> b Source # foldr' :: (a -> b -> b) -> b -> Refined1 p f a -> b Source # foldl :: (b -> a -> b) -> b -> Refined1 p f a -> b Source # foldl' :: (b -> a -> b) -> b -> Refined1 p f a -> b Source # foldr1 :: (a -> a -> a) -> Refined1 p f a -> a Source # foldl1 :: (a -> a -> a) -> Refined1 p f a -> a Source # toList :: Refined1 p f a -> [a] Source # null :: Refined1 p f a -> Bool Source # length :: Refined1 p f a -> Int Source # elem :: Eq a => a -> Refined1 p f a -> Bool Source # maximum :: Ord a => Refined1 p f a -> a Source # minimum :: Ord a => Refined1 p f a -> a Source # | |
Traversable f => Traversable (Refined1 p f) Source # | |
Defined in Refined.Unsafe.Type Methods traverse :: Applicative f0 => (a -> f0 b) -> Refined1 p f a -> f0 (Refined1 p f b) Source # sequenceA :: Applicative f0 => Refined1 p f (f0 a) -> f0 (Refined1 p f a) Source # mapM :: Monad m => (a -> m b) -> Refined1 p f a -> m (Refined1 p f b) Source # sequence :: Monad m => Refined1 p f (m a) -> m (Refined1 p f a) Source # | |
Functor f => Functor (Refined1 p f) Source # | |
Show (f x) => Show (Refined1 p f x) Source # | |
NFData (f x) => NFData (Refined1 p f x) Source # | |
Defined in Refined.Unsafe.Type | |
Eq (f x) => Eq (Refined1 p f x) Source # | |
Ord (f x) => Ord (Refined1 p f x) Source # | |
Defined in Refined.Unsafe.Type Methods compare :: Refined1 p f x -> Refined1 p f x -> Ordering Source # (<) :: Refined1 p f x -> Refined1 p f x -> Bool Source # (<=) :: Refined1 p f x -> Refined1 p f x -> Bool Source # (>) :: Refined1 p f x -> Refined1 p f x -> Bool Source # (>=) :: Refined1 p f x -> Refined1 p f x -> Bool Source # max :: Refined1 p f x -> Refined1 p f x -> Refined1 p f x Source # min :: Refined1 p f x -> Refined1 p f x -> Refined1 p f x Source # | |
Hashable (f x) => Hashable (Refined1 p f x) Source # | |
Creation
reallyUnsafeRefine :: x -> Refined p x Source #
Constructs a Refined
value, completely
ignoring any refinements! Use this only
when you can manually prove that the refinement
holds.
Since: 0.3.0.0
reallyUnsafeRefine1 :: f x -> Refined1 p f x Source #
unsafeRefine :: Predicate p x => x -> Refined p x Source #
Coercion
reallyUnsafeUnderlyingRefined :: Coercion x (Refined p x) Source #
A coercion between a type and any refinement of that type. See Data.Type.Coercion for functions manipulating coercions.
Since: 0.3.0.0