parameterized-utils-2.1.11.0: Classes and data structures for working with data-kind indexed types

Copyright | (c) Galois Inc 2014-2019
Maintainer | Langston Barrett <langston@galois.com>
Safe Haskell | Trustworthy
Language | Haskell2010

Data.Parameterized.ClassesC

Description

This module declares classes for working with types with the kind `(k -> *) -> *` for any kind `k`.

These classes generally require type-level evidence for operations on their subterms, but don't actually provide it themselves (because their types are not themselves parameterized, unlike those in Data.Parameterized.TraversableFC).

Note that there is still some ambiguity around naming conventions, see issue 23.

# Documentation

class TestEqualityC (t :: (k -> Type) -> Type) where Source #

Methods

testEqualityC :: (forall (x :: k) (y :: k). f x -> f y -> Maybe (x :~: y)) -> t f -> t f -> Bool Source #

#### Instances

Instances details

TestEqualityC (Some :: (k -> Type) -> Type) Source # | This instance demonstrates where the above class is useful: namely, in types with existential quantification.
Instance details Defined in Data.Parameterized.ClassesC Methods testEqualityC :: (forall (x :: k) (y :: k). f x -> f y -> Maybe (x :~: y)) -> Some f -> Some f -> Bool Source #

class TestEqualityC t => OrdC (t :: (k -> Type) -> Type) where Source #

Methods

compareC :: (forall (x :: k) (y :: k). f x -> g y -> OrderingF x y) -> t f -> t g -> Ordering Source #

#### Instances

Instances details

OrdC (Some :: (k -> Type) -> Type) Source # |
Instance details Defined in Data.Parameterized.ClassesC Methods compareC :: (forall (x :: k) (y :: k). f x -> g y -> OrderingF x y) -> Some f -> Some g -> Ordering Source #