Skip to content

StdClass

This module can be imported directly or as a part of the StdEnv module.

The distinction between this module and the StdOverloaded module is that this module builds on top of the StdOverloaded module.

Visit StdClass on Cloogle for source code of this module.

Arithmetic classes

PlusMin

Declaration

// CLEAN

class PlusMin T | (+ T) & (- T) & (zero T)

This class does not define additional operators or functions on the type T, so it serves the purpose of a shorthand to the three classes.

Instead of writing all three classes, you can simply use this class instead, given that the type that you are working with is an instance of the classes mentioned.

MultDiv

Declaration

// CLEAN

class MultDiv T | (* T) & (/ T) & (one T)

This class does not define additional operators or functions on the type T, so it serves the purpose of a shorthand to the three classes.

Instead of writing all three classes, you can simply use this class instead, given that the type that you are working with is an instance of the classes mentioned.

Arith

Declaration

// CLEAN

class Arith T | (PlusMin T) & (MultDiv T) & (abs T) & (sign T) & (~ T)

This class does not define additional operators or functions on the type T, so it serves the purpose of a shorthand to the classes mentioned.

Instead of writing all classes, you can simply use this class instead, given that the type that you are working with is an instance of the classes mentioned.

IncDec

Declaration

// CLEAN

class IncDec T | (+ T) & (- T) & (one T) & (zero T)
where
    inc :: T -> T | (+ T) & (one T)
    inc    x => ...
    dec :: T -> T | (- T) & (one T)
    inc    x => ...

This class defines two additional functions on the type T.

The behavior of both functions are determined by the definition of the addition, subtraction. and one unit.

Under the hood, the function inc performs addition operation using the argument x and one as operands. Similarly, the function dec performs subtraction operation using the argument x and one as operands.

Enum

Declaration

// CLEAN

class Enum T | (< T) & (IncDec T)

This class does not define additional operators or functions on the type T, however, dot-dot syntax requires this class to operate.


Relational classes

Eq

Declaration

// CLEAN

class Eq T | (== T)
where
    (<>) infixl 4 :: T T -> Bool
    (<>)          :: x y => ...

This class defines the not equal operation for the type T if it is an instance of the Equalilty class.

Under the hood, the function performs equality operation using x and y as operands and returns the negated logical value.

Ord

Declaration

// CLEAN

class Ord T | (< T)
where
    (>)  infixl 4 :: T T  -> Bool
    (>)           :: x y  => ...

    (<=) infixl 4 :: T T -> Bool
    (<=)          :: x y => ...

    (>=) infixl 4 :: T T -> Bool
    (>=)          :: x y => ...

    min :: T T -> T
    min :: x y => ...

    max :: T T -> T
    max :: x y => ...

Definition

Defines the rest of the relational operations, as well as, the min, and max functions for the type T if it is an instance of the Less than class.

The operators and functions are defined in terms of Less than function and not function (unary operator).