nikita-volkov / typeclasses / Typeclasses.Classes.Equality

Equality typeclass definition and its instances for basic types.

Definition


type alias Equality a =
{ eq : a -> a -> Basics.Bool
, notEq : a -> a -> Basics.Bool 
}

Explicit typeclass which implements equality for type a.

Construction utilities

eqAndNotEq : (a -> a -> Basics.Bool) -> (a -> a -> Basics.Bool) -> Equality a

Construct from the eq and not-eq operations.

eq : (a -> a -> Basics.Bool) -> Equality a

Construct just from the eq operation.

compare : (a -> a -> Basics.Order) -> Equality a

Construct from a comparison operation.

comparable : Equality comparable

Instance for any type, which satisfies the magic comparable constraint.

Instance transformation utilities

map : (b -> a) -> Equality a -> Equality b

Map over the owner type of an instance to produce a new instance.

Please notice that mapping is contravariant (i.e., (b -> a) instead of (a -> b)).

Instances

Primitives

bool : Equality Basics.Bool

Instance for Bool.

int : Equality Basics.Int

Instance for Int.

float : Equality Basics.Float

Instance for Float.

char : Equality Char

Instance for Char.

string : Equality String

Instance for String.

Composites

maybe : Equality a -> Equality (Maybe a)

Equality for Maybe, with instance for its member provided.

result : Equality a -> Equality b -> Equality (Result a b)

Instance for Result, with instances for its members provided.

either : Equality a -> Equality b -> Equality (Either a b)

Instance for Either, with instances for its members provided.

list : Equality a -> Equality (List a)

Equality for List, with instance for its member provided.

array : Equality a -> Equality (Array a)

Equality for Array, with instance for its member provided.

Tuples

tuple2 : Equality a -> Equality b -> Equality ( a, b )

Instance for tuple, with instances for its members provided.

tuple3 : Equality a -> Equality b -> Equality c -> Equality ( a, b, c )

Instance for tuple, with instances for its members provided.