Data.Constraint.Forall

constraints-0.9.1: Constraint manipulation

Copyright | (C) 2011-2015 Edward Kmett (C) 2015 Ørjan Johansen (C) 2016 David Feuer
License | BSD-style (see the file LICENSE)
Maintainer | Edward Kmett <ekmett@gmail.com>
Stability | experimental
Portability | non-portable
Safe Haskell | Trustworthy
Language | Haskell2010

Data.Constraint.Forall

Description

This module uses a trick to provide quantification over constraints.

Synopsis

- type family Forall (p :: k -> Constraint) :: Constraint
- inst :: forall p a. Forall p :- p a
- class Forall (ComposeC p f) => ForallF (p :: k2 -> Constraint) (f :: k1 -> k2)
- instF :: forall p f a. ForallF p f :- p (f a)
- type Forall1 p = Forall p
- inst1 :: forall (p :: (* -> *) -> Constraint) (f :: * -> *). Forall p :- p f
- class Forall (Q p t) => ForallT (p :: k4 -> Constraint) (t :: (k1 -> k2) -> k3 -> k4)
- instT :: forall (p :: k4 -> Constraint) (t :: (k1 -> k2) -> k3 -> k4) (f :: k1 -> k2) (a :: k3). ForallT p t :- p (t f a)
- type family ForallV :: k -> Constraint
- class InstV (p :: k) c | k c -> p where
- forall :: forall p. (forall a. Dict (p a)) -> Dict (Forall p)

# Documentation

type family Forall (p :: k -> Constraint) :: Constraint #

A representation of the quantified constraint `forall a. p a`.

Instances

type Forall k p # |
type Forall k p

inst :: forall p a. Forall p :- p a #

Instantiate a quantified ``Forall` p` constraint at type `a`.

class Forall (ComposeC p f) => ForallF (p :: k2 -> Constraint) (f :: k1 -> k2) #

A representation of the quantified constraint `forall a. p (f a)`.

Instances

Forall k1 (ComposeC k2 k1 p f) => ForallF k1 k2 p f # |

instF :: forall p f a. ForallF p f :- p (f a) #

Instantiate a quantified ``ForallF` p f` constraint at type `a`.

type Forall1 p = Forall p #

inst1 :: forall (p :: (* -> *) -> Constraint) (f :: * -> *). Forall p :- p f #

Instantiate a quantified constraint on kind `* -> *`. This is now redundant since ``inst`` became polykinded.

class Forall (Q p t) => ForallT (p :: k4 -> Constraint) (t :: (k1 -> k2) -> k3 -> k4) #

A representation of the quantified constraint `forall f a. p (t f a)`.

Instances

Forall (k1 -> k2) (Q k3 k4 (k1 -> k2) p t) => ForallT k1 k2 k3 k4 p t # |

instT :: forall (p :: k4 -> Constraint) (t :: (k1 -> k2) -> k3 -> k4) (f :: k1 -> k2) (a :: k3). ForallT p t :- p (t f a) #

Instantiate a quantified ``ForallT` p t` constraint at types `f` and `a`.

type family ForallV :: k -> Constraint #

A representation of the quantified constraint `forall a1 a2 ... an . p a1 a2 ... an`, supporting a variable number of parameters.

Instances

type ForallV k # |
type ForallV k

class InstV (p :: k) c | k c -> p where #

Instantiate a quantified ``ForallV` p` constraint as `c`, where `c ~ p a1 a2 ... an`.

Minimal complete definition

instV

Methods

instV :: ForallV p :- c #

Instances

(~) Constraint p c => InstV Constraint p c # |
Associated Types type ForallV' p (c :: p) :: Constraint Methods instV :: ForallV p c :- c #
InstV (k2 -> k3) (p a) c => InstV (k1 -> k2 -> k3) p c # |
Associated Types type ForallV' p (c :: p) :: Constraint Methods instV :: ForallV p c :- c #
(~) Constraint (p a) c => InstV (k -> Constraint) p c # |
Associated Types type ForallV' p (c :: p) :: Constraint Methods instV :: ForallV p c :- c #

forall :: forall p. (forall a. Dict (p a)) -> Dict (Forall p) #