rerefined-0.4.0: Refinement types, again
Safe HaskellSafe-Inferred
LanguageGHC2021

Rerefined.Predicate.Common

Description

Handy utilities for defining predicates.

Synopsis

Re-exports

proxy# :: forall {k} (a :: k). Proxy# a #

Witness for an unboxed Proxy# value, which has no runtime representation.

data Builder #

Thin wrapper over Buffer with a handy Semigroup instance.

>>> :set -XOverloadedStrings -XMagicHash
>>> fromText "foo" <> fromChar '_' <> fromAddr "bar"#
"foo_bar"

Remember: this is a strict builder, so on contrary to Data.Text.Lazy.Builder for optimal performance you should use strict left folds instead of lazy right ones.

Note that (similar to other builders) concatenation of Builders allocates thunks. This is to a certain extent mitigated by aggressive inlining, but it is faster to use Buffer directly.

Instances

Instances details
IsString Builder 
Instance details

Defined in Data.Text.Builder.Linear

Methods

fromString :: String -> Builder #

Monoid Builder 
Instance details

Defined in Data.Text.Builder.Linear

Semigroup Builder 
Instance details

Defined in Data.Text.Builder.Linear

Show Builder 
Instance details

Defined in Data.Text.Builder.Linear

Predicate validation

validateFail :: forall p. (Predicate p, KnownPredicateName p) => Proxy# p -> Builder -> [RefineFailure] -> Maybe RefineFailure Source #

Shortcut for returning a predicate validation failure.

validateBool :: forall p. (Predicate p, KnownPredicateName p) => Proxy# p -> Builder -> Bool -> Maybe RefineFailure Source #

Shortcut for simply validating a Bool.