Safe Haskell | Safe-Inferred |
---|---|
Language | GHC2021 |
Synopsis
- data Refined p a
- refine :: forall p a. Refine p a => a -> Either RefineFailure (Refined p a)
- unrefine :: Refined p a -> a
- reifyPredicate :: forall p a. Refine p a => a -> Bool
- unsafeRefine :: a -> Refined p a
- unsafeRerefine :: forall pNew pOld a. Refined pOld a -> Refined pNew a
- data Refined1 p f a
- refine1 :: forall p f a. Refine1 p f => f a -> Either RefineFailure (Refined1 p f a)
- unrefine1 :: Refined1 p f a -> f a
- reifyPredicate1 :: forall p f a. Refine1 p f => f a -> Bool
- squashRefined1 :: Refined1 p f a -> Refined p (f a)
- unsafeRefine1 :: f a -> Refined1 p f a
- unsafeRerefine1 :: forall pNew pOld f a. Refined1 pOld f a -> Refined1 pNew f a
- data RefineFailure
- prettyRefineFailure :: RefineFailure -> Text
- prettyRefineFailure' :: RefineFailure -> Text
Refined
a
refined with predicate p
.
Instances
Lift a => Lift (Refined p a :: Type) Source # | |
(Arbitrary a, Refine p a, KnownPredicateName p) => Arbitrary (Refined p a) Source # | Generate a refined term by generating an unrefined term and asserting the predicate. Will runtime error if it fails to find a satisfying term (based on size). |
Show a => Show (Refined p a) Source # | |
Eq a => Eq (Refined p a) Source # | |
Ord a => Ord (Refined p a) Source # | |
Defined in Rerefined.Refine |
refine :: forall p a. Refine p a => a -> Either RefineFailure (Refined p a) Source #
Refine a
with predicate p
.
reifyPredicate :: forall p a. Refine p a => a -> Bool Source #
Reify a predicate.
unsafeRefine :: a -> Refined p a Source #
Construct a Refined
without validating the predicate p
.
Unsafe. Use only when you can manually prove that the predicate holds.
unsafeRerefine :: forall pNew pOld a. Refined pOld a -> Refined pNew a Source #
Replace a Refined'
s predicate without validating the new prdicate pNew
.
Unsafe. Use only when you can manually prove that the new predicate holds.
Refined1
f a
refined with predicate p
.
We may derive legal Functor
, Traversable
instances for this as
Refine1
guarantees that the predicate only applies to
the functor structure. That is, you _may_ alter a Refined1
without
re-asserting its predicate, provided your changes are made without altering
the structure/shape of f
(e.g. fmap
, traverse
).
Instances
Lift (f a) => Lift (Refined1 p f a :: Type) Source # | |
Foldable f => Foldable (Refined1 p f) Source # | |
Defined in Rerefined.Refine fold :: Monoid m => Refined1 p f m -> m # foldMap :: Monoid m => (a -> m) -> Refined1 p f a -> m # foldMap' :: Monoid m => (a -> m) -> Refined1 p f a -> m # foldr :: (a -> b -> b) -> b -> Refined1 p f a -> b # foldr' :: (a -> b -> b) -> b -> Refined1 p f a -> b # foldl :: (b -> a -> b) -> b -> Refined1 p f a -> b # foldl' :: (b -> a -> b) -> b -> Refined1 p f a -> b # foldr1 :: (a -> a -> a) -> Refined1 p f a -> a # foldl1 :: (a -> a -> a) -> Refined1 p f a -> a # toList :: Refined1 p f a -> [a] # null :: Refined1 p f a -> Bool # length :: Refined1 p f a -> Int # elem :: Eq a => a -> Refined1 p f a -> Bool # maximum :: Ord a => Refined1 p f a -> a # minimum :: Ord a => Refined1 p f a -> a # | |
Traversable f => Traversable (Refined1 p f) Source # | |
Defined in Rerefined.Refine | |
Functor f => Functor (Refined1 p f) Source # | |
(Arbitrary (f a), Refine1 p f, KnownPredicateName p) => Arbitrary (Refined1 p f a) Source # | Generate a refined term by generating an unrefined term and asserting the functor predicate. Will runtime error if it fails to find a satisfying term (based on size). |
Show (f a) => Show (Refined1 p f a) Source # | |
Eq (f a) => Eq (Refined1 p f a) Source # | |
Ord (f a) => Ord (Refined1 p f a) Source # | |
Defined in Rerefined.Refine compare :: Refined1 p f a -> Refined1 p f a -> Ordering # (<) :: Refined1 p f a -> Refined1 p f a -> Bool # (<=) :: Refined1 p f a -> Refined1 p f a -> Bool # (>) :: Refined1 p f a -> Refined1 p f a -> Bool # (>=) :: Refined1 p f a -> Refined1 p f a -> Bool # |
refine1 :: forall p f a. Refine1 p f => f a -> Either RefineFailure (Refined1 p f a) Source #
Refine f a
with functor predicate p
.
reifyPredicate1 :: forall p f a. Refine1 p f => f a -> Bool Source #
Reify a functor predicate.
squashRefined1 :: Refined1 p f a -> Refined p (f a) Source #
unsafeRefine1 :: f a -> Refined1 p f a Source #
Construct a Refined1
without validating the predicate p
.
Unsafe. Use only when you can manually prove that the predicate holds.
unsafeRerefine1 :: forall pNew pOld f a. Refined1 pOld f a -> Refined1 pNew f a Source #
Replace a Refined1'
s predicate without validating the new prdicate
pNew
.
Unsafe. Use only when you can manually prove that the new predicate holds.
Errors
data RefineFailure Source #
Predicate validation failure.
Instances
Show RefineFailure Source # | |
Defined in Rerefined.Predicate showsPrec :: Int -> RefineFailure -> ShowS # show :: RefineFailure -> String # showList :: [RefineFailure] -> ShowS # |