Copyright | (C) 2011-2015 Edward Kmett, (C) 2015 Ørjan Johansen |
---|---|
License | BSD-style (see the file LICENSE) |
Maintainer | Edward Kmett <ekmett@gmail.com> |
Stability | experimental |
Portability | non-portable |
Safe Haskell | Trustworthy |
Language | Haskell2010 |
This module uses a trick to provide quantification over constraints.
- type family Forall (p :: k -> Constraint) :: Constraint
- inst :: forall p a. Forall p :- p a
- type family ForallF (p :: k2 -> Constraint) (f :: k1 -> k2) :: Constraint
- instF :: forall p f a. ForallF p f :- p (f a)
- type Forall1 p = Forall p
- inst1 :: forall p f. Forall p :- p f
- type family ForallT (p :: k3 -> Constraint) (t :: k1 -> k2 -> k3) :: Constraint
- instT :: forall p t f a. ForallT p t :- p (t f a)
Documentation
type family Forall (p :: k -> Constraint) :: Constraint Source #
A representation of the quantified constraint forall a. p a
.
type family ForallF (p :: k2 -> Constraint) (f :: k1 -> k2) :: Constraint Source #
A representation of the quantified constraint forall a. p (f a)
.
instF :: forall p f a. ForallF p f :- p (f a) Source #
Instantiate a quantified
constraint at type ForallF
p fa
.
inst1 :: forall p f. Forall p :- p f Source #
Instantiate a quantified constraint on kind * -> *
.
This is now redundant since
became polykinded.inst
type family ForallT (p :: k3 -> Constraint) (t :: k1 -> k2 -> k3) :: Constraint Source #
A representation of the quantified constraint forall f a. p (t f a)
.