EN
PréludeChargé par défaut — aucun import nécessaire.

FromNat — surcharge des littéraux numériques

Synopsis

Rational — nombres rationnels exacts

FromDecimal — surcharge des littéraux décimaux

Additive — addition et zéro

Multiplicative — multiplication et un

AdditiveGroup — soustraction et négation

interface Abs a where
abs : a -> a

Valeur absolue : retire le signe. Une CLASSE, donc chaque type signé fournit la sienne (un type utilisateur aussi). abs (-5) = 5, abs 5 = 5. (Nat est toujours non négatif, donc n'est pas une instance.)

Instances : Double, Int, Int16, Int32, Int64, Int8

Semiring — addition et multiplication avec distributivité

EuclideanDiv — division entière et modulo

interface Semiring a => EuclideanDiv a where
div : a -> a -> a
mod : a -> a -> a

Division entière à sémantique euclidienne. Sur Semiring (pas Ring), donc Nat a aussi div/mod — les mêmes div/mod que Int. Le reste est toujours positif ou nul. div (-7) 3 = -3, mod (-7) 3 = 2 (pas -1 comme en C). Loi : div x y * y + mod x y = x

Ring — un semi-anneau avec soustraction

CommutativeRing — multiplication commutative

EuclideanRing — un anneau euclidien

interface CommutativeRing a => EuclideanDiv a => EuclideanRing a where {}

Un anneau commutatif avec division euclidienne. Interface marqueur (= CommutativeRing + EuclideanDiv). Nat n'en est pas un (pas de negate), bien qu'il ait quand même EuclideanDiv. Note : Double n'est volontairement PAS encore EuclideanDiv/EuclideanRing/Field — savoir si les div/mod de Double doivent être tronqués ou suivre la structure de corps triviale (div = /, mod = zero) reste ouvert.

DivisionRing — inverse et division réelle

interface Ring a => DivisionRing a where
recip : a -> a
(/) : a -> a -> a

Division réelle et inverse. Étend Ring. Pour les types continus (Double). Pas pour la division entière.

Instances : Double, Rational

Fonctions en virgule flottante sur Double

pi : Double

π, en double précision.

interface Floating a where
sqrt : a -> a
exp : a -> a
ln : a -> a
sin : a -> a
cos : a -> a
tan : a -> a

Floating rassemble les FONCTIONS transcendantes. Double est la seule instance pour l'instant ; la CLASSE les rend génériques pour que d'autres types flottants (un futur flottant à précision arbitraire, …) puissent rejoindre. ln est indéfini pour les entrées non positives ; sin/cos/tan prennent des radians.

Instances : Double