constraints-0.13.4: Constraint manipulation
Copyright (C) 2015-2016 Edward Kmett
License BSD-style (see the file LICENSE)
Maintainer Edward Kmett <ekmett@gmail.com>
Stability experimental
Portability non-portable
Safe Haskell None
Language Haskell2010

Data.Constraint.Deferrable

Description

The idea for this trick comes from Dimitrios Vytiniotis.

Synopsis

Documentation

class Deferrable p where Source #

Allow an attempt at resolution of a constraint at a later time

Methods

deferEither :: proxy p -> (p => r) -> Either String r Source #

Resolve a Deferrable constraint with observable failure.

Instances

Instances details
Deferrable () Source #
Instance details

Defined in Data.Constraint.Deferrable

Methods

deferEither :: proxy () -> (() => r) -> Either String r Source #

( Deferrable a, Deferrable b) => Deferrable (a, b) Source #
Instance details

Defined in Data.Constraint.Deferrable

Methods

deferEither :: proxy (a, b) -> ((a, b) => r) -> Either String r Source #

( Typeable k, Typeable a, Typeable b) => Deferrable (a ~ b) Source #

Deferrable homogeneous equality constraints.

Note that due to a GHC bug (https:/ ghc.haskell.org trac ghc ticket/10343), using this instance on GHC 7.10 will only work with * -kinded types.

Instance details

Defined in Data.Constraint.Deferrable

Methods

deferEither :: proxy (a ~ b) -> (a ~ b => r) -> Either String r Source #

( Deferrable a, Deferrable b, Deferrable c) => Deferrable (a, b, c) Source #
Instance details

Defined in Data.Constraint.Deferrable

Methods

deferEither :: proxy (a, b, c) -> ((a, b, c) => r) -> Either String r Source #

( Typeable i, Typeable j, Typeable a, Typeable b) => Deferrable (a ~~ b) Source #

Deferrable heterogenous equality constraints.

Only available on GHC 8.0 or later.

Instance details

Defined in Data.Constraint.Deferrable

Methods

deferEither :: proxy (a ~~ b) -> (a ~~ b => r) -> Either String r Source #

defer :: forall p r proxy. Deferrable p => proxy p -> (p => r) -> r Source #

Defer a constraint for later resolution in a context where we want to upgrade failure into an error

defer_ :: forall p r. Deferrable p => (p => r) -> r Source #

A version of defer that uses visible type application in place of a Proxy .

Only available on GHC 8.0 or later.

deferEither_ :: forall p r. Deferrable p => (p => r) -> Either String r Source #

A version of deferEither that uses visible type application in place of a Proxy .

Only available on GHC 8.0 or later.

data (a :: k1) :~~: (b :: k2) where infix 4 Source #

Kind heterogeneous propositional equality. Like :~: , a :~~: b is inhabited by a terminating value if and only if a is the same type as b .

Since: base-4.10.0.0

Constructors

HRefl :: forall k1 (a :: k1). a :~~: a

Instances

Instances details
Category ( (:~~:) :: k -> k -> Type )

Since: base-4.10.0.0

Instance details

Defined in Control.Category

Methods

id :: forall (a :: k0). a :~~: a Source #

(.) :: forall (b :: k0) (c :: k0) (a :: k0). (b :~~: c) -> (a :~~: b) -> a :~~: c Source #

TestCoercion ( (:~~:) a :: k -> Type )

Since: base-4.10.0.0

Instance details

Defined in Data.Type.Coercion

Methods

testCoercion :: forall (a0 :: k0) (b :: k0). (a :~~: a0) -> (a :~~: b) -> Maybe ( Coercion a0 b) Source #

TestEquality ( (:~~:) a :: k -> Type )

Since: base-4.10.0.0

Instance details

Defined in Data.Type.Equality

Methods

testEquality :: forall (a0 :: k0) (b :: k0). (a :~~: a0) -> (a :~~: b) -> Maybe (a0 :~: b) Source #

NFData2 ( (:~~:) :: Type -> Type -> Type )

Since: deepseq-1.4.3.0

Instance details

Defined in Control.DeepSeq

Methods

liftRnf2 :: (a -> ()) -> (b -> ()) -> (a :~~: b) -> () Source #

NFData1 ( (:~~:) a :: Type -> Type )

Since: deepseq-1.4.3.0

Instance details

Defined in Control.DeepSeq

Methods

liftRnf :: (a0 -> ()) -> (a :~~: a0) -> () Source #

a ~~ b => Bounded (a :~~: b)

Since: base-4.10.0.0

Instance details

Defined in Data.Type.Equality

a ~~ b => Enum (a :~~: b)

Since: base-4.10.0.0

Instance details

Defined in Data.Type.Equality

Eq (a :~~: b)

Since: base-4.10.0.0

Instance details

Defined in Data.Type.Equality

( Typeable i, Typeable j, Typeable a, Typeable b, a ~~ b) => Data (a :~~: b)

Since: base-4.10.0.0

Instance details

Defined in Data.Data

Methods

gfoldl :: ( forall d b0. Data d => c (d -> b0) -> d -> c b0) -> ( forall g. g -> c g) -> (a :~~: b) -> c (a :~~: b) Source #

gunfold :: ( forall b0 r. Data b0 => c (b0 -> r) -> c r) -> ( forall r. r -> c r) -> Constr -> c (a :~~: b) Source #

toConstr :: (a :~~: b) -> Constr Source #

dataTypeOf :: (a :~~: b) -> DataType Source #

dataCast1 :: Typeable t => ( forall d. Data d => c (t d)) -> Maybe (c (a :~~: b)) Source #

dataCast2 :: Typeable t => ( forall d e. ( Data d, Data e) => c (t d e)) -> Maybe (c (a :~~: b)) Source #

gmapT :: ( forall b0. Data b0 => b0 -> b0) -> (a :~~: b) -> a :~~: b Source #

gmapQl :: (r -> r' -> r) -> r -> ( forall d. Data d => d -> r') -> (a :~~: b) -> r Source #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> ( forall d. Data d => d -> r') -> (a :~~: b) -> r Source #

gmapQ :: ( forall d. Data d => d -> u) -> (a :~~: b) -> [u] Source #

gmapQi :: Int -> ( forall d. Data d => d -> u) -> (a :~~: b) -> u Source #

gmapM :: Monad m => ( forall d. Data d => d -> m d) -> (a :~~: b) -> m (a :~~: b) Source #

gmapMp :: MonadPlus m => ( forall d. Data d => d -> m d) -> (a :~~: b) -> m (a :~~: b) Source #

gmapMo :: MonadPlus m => ( forall d. Data d => d -> m d) -> (a :~~: b) -> m (a :~~: b) Source #

Ord (a :~~: b)

Since: base-4.10.0.0

Instance details

Defined in Data.Type.Equality

a ~~ b => Read (a :~~: b)

Since: base-4.10.0.0

Instance details

Defined in Data.Type.Equality

Show (a :~~: b)

Since: base-4.10.0.0

Instance details

Defined in Data.Type.Equality

NFData (a :~~: b)

Since: deepseq-1.4.3.0

Instance details

Defined in Control.DeepSeq

Methods

rnf :: (a :~~: b) -> () Source #

HasDict (a ~~ b) (a :~~: b) Source #
Instance details

Defined in Data.Constraint

data (a :: k) :~: (b :: k) where infix 4 Source #

Propositional equality. If a :~: b is inhabited by some terminating value, then the type a is the same as the type b . To use this equality in practice, pattern-match on the a :~: b to get out the Refl constructor; in the body of the pattern-match, the compiler knows that a ~ b .

Since: base-4.7.0.0

Constructors

Refl :: forall k (a :: k). a :~: a

Instances

Instances details
Category ( (:~:) :: k -> k -> Type )

Since: base-4.7.0.0

Instance details

Defined in Control.Category

Methods

id :: forall (a :: k0). a :~: a Source #

(.) :: forall (b :: k0) (c :: k0) (a :: k0). (b :~: c) -> (a :~: b) -> a :~: c Source #

TestCoercion ( (:~:) a :: k -> Type )

Since: base-4.7.0.0

Instance details

Defined in Data.Type.Coercion

Methods

testCoercion :: forall (a0 :: k0) (b :: k0). (a :~: a0) -> (a :~: b) -> Maybe ( Coercion a0 b) Source #

TestEquality ( (:~:) a :: k -> Type )

Since: base-4.7.0.0

Instance details

Defined in Data.Type.Equality

Methods

testEquality :: forall (a0 :: k0) (b :: k0). (a :~: a0) -> (a :~: b) -> Maybe (a0 :~: b) Source #

NFData2 ( (:~:) :: Type -> Type -> Type )

Since: deepseq-1.4.3.0

Instance details

Defined in Control.DeepSeq

Methods

liftRnf2 :: (a -> ()) -> (b -> ()) -> (a :~: b) -> () Source #

NFData1 ( (:~:) a)

Since: deepseq-1.4.3.0

Instance details

Defined in Control.DeepSeq

Methods

liftRnf :: (a0 -> ()) -> (a :~: a0) -> () Source #

a ~ b => Bounded (a :~: b)

Since: base-4.7.0.0

Instance details

Defined in Data.Type.Equality

a ~ b => Enum (a :~: b)

Since: base-4.7.0.0

Instance details

Defined in Data.Type.Equality

Eq (a :~: b)

Since: base-4.7.0.0

Instance details

Defined in Data.Type.Equality

(a ~ b, Data a) => Data (a :~: b)

Since: base-4.7.0.0

Instance details

Defined in Data.Data

Methods

gfoldl :: ( forall d b0. Data d => c (d -> b0) -> d -> c b0) -> ( forall g. g -> c g) -> (a :~: b) -> c (a :~: b) Source #

gunfold :: ( forall b0 r. Data b0 => c (b0 -> r) -> c r) -> ( forall r. r -> c r) -> Constr -> c (a :~: b) Source #

toConstr :: (a :~: b) -> Constr Source #

dataTypeOf :: (a :~: b) -> DataType Source #

dataCast1 :: Typeable t => ( forall d. Data d => c (t d)) -> Maybe (c (a :~: b)) Source #

dataCast2 :: Typeable t => ( forall d e. ( Data d, Data e) => c (t d e)) -> Maybe (c (a :~: b)) Source #

gmapT :: ( forall b0. Data b0 => b0 -> b0) -> (a :~: b) -> a :~: b Source #

gmapQl :: (r -> r' -> r) -> r -> ( forall d. Data d => d -> r') -> (a :~: b) -> r Source #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> ( forall d. Data d => d -> r') -> (a :~: b) -> r Source #

gmapQ :: ( forall d. Data d => d -> u) -> (a :~: b) -> [u] Source #

gmapQi :: Int -> ( forall d. Data d => d -> u) -> (a :~: b) -> u Source #

gmapM :: Monad m => ( forall d. Data d => d -> m d) -> (a :~: b) -> m (a :~: b) Source #

gmapMp :: MonadPlus m => ( forall d. Data d => d -> m d) -> (a :~: b) -> m (a :~: b) Source #

gmapMo :: MonadPlus m => ( forall d. Data d => d -> m d) -> (a :~: b) -> m (a :~: b) Source #

Ord (a :~: b)

Since: base-4.7.0.0

Instance details

Defined in Data.Type.Equality

a ~ b => Read (a :~: b)

Since: base-4.7.0.0

Instance details

Defined in Data.Type.Equality

Show (a :~: b)

Since: base-4.7.0.0

Instance details

Defined in Data.Type.Equality

NFData (a :~: b)

Since: deepseq-1.4.3.0

Instance details

Defined in Control.DeepSeq

Methods

rnf :: (a :~: b) -> () Source #

HasDict (a ~ b) (a :~: b) Source #
Instance details

Defined in Data.Constraint

Methods

evidence :: (a :~: b) -> Dict (a ~ b) Source #