# Data.Operator.Eq

- Package
- purescript-higher-order
- Repository
- matthew-hilty/purescript-higher-order

### #Eq1 Source

`class Eq1 f where`

The `Eq1`

typeclass of this module represents type constructors `f`

that
have an associated equivalence relation of values of type `f a`

independent of any choice of `a`

.

Unlike the `Data.Eq.Eq1`

typeclass of the 'Prelude' module [hereafter,
qualified by the prefix "Prelude"], `Eq1`

, defined here, is not generally
equivalent to the `Eq`

typeclass (also found in the 'Prelude' module).

For example, whereas both

`eq (Cons 0 Nil) (Cons 1 Nil) == false`

and

`Prelude.eq1 (Cons 0 Nil) (Cons 1 Nil) == false`

the definition found in this module gives the following:

`eq1 (Cons 0 Nil) (Cons 1 Nil) == true`

That is, the `Int`

values in a value of `List Int`

(and, more generally,
the `a`

values in any `List a`

) have little relevance in determining the
results of the `eq1`

function.

The instances of the `Eq1`

typeclass of this module are designed to
emphasize the value-level effects of the type constructors themselves.
In practice, this often means that an equivalence relation is assigned to
the type constructor's data constructors. The `Eq1`

instance declaration
for `List`

, for example, effectively projects any value of type `List a`

into one of two equivalence classes, where the specific equivalence-class
assignment is determined by the data constructor (`Cons`

or `Nil`

) of the
value's head deconstruction.

This interpretation of `Eq1`

exists in addition to `Prelude.Eq1`

because datatypes often have intrinsic (or designed) subgroupings,
commonly distingished by data constructors, and a means to relate these
different subgroupings can be useful -- especially in concert with
`PartialOrd1`

and other related typeclasses.

#### Members

#### Instances

### #GenericEq1 Source

`class GenericEq1 a where`

#### Members

`genericEq1 :: a -> a -> Boolean`

#### Instances

`(GenericEq1 b) => GenericEq1 (Sum a b)`

`(GenericEq1 a) => GenericEq1 (Product a b)`

`GenericEq1 (Constructor name a)`