num a "? - Retrouvez les réponses et les commentaires concernant cette question" />
10
votes

Pourquoi je reçois le "numéro de classe A où" au lieu de la "classe" (EQ A, show a) => num a "?

J'apprends Haskell. J'envoie la commande dans GHCI: : Info num code>.

-- | Basic numeric class.
--
-- Minimal complete definition: all except 'negate' or @(-)@
class  Num a  where


1 commentaires

Ceci n'est probablement que GHC divergeant de la définition de langue officielle.


4 Réponses :


13
votes

Hackage montrant classe (EQ A, show a) => num A est probablement un bug, mais il n'y a vraiment aucune raison pour num a pour exiger EQ A et Afficher un .


10 commentaires

Je ne suis pas d'accord avec vous sur le "vraiment non une raison".


@Bush OK, pourquoi pensez-vous que num doit nécessiter intrinsèquement eq et Afficher ?


Parce que tous les chiffres doivent être équitables. En outre, il doit avoir une capacité à imprimer.


@Bush aux fins des opérations purement arithmétiques, comme num est; Il n'y a pas besoin de eq et Afficher , car aucun de ceux qui n'ont rien à voir avec l'ajout, la multiplication ou la soustraction. C'est à la place des implémentations individuelles pour gérer cela. Vous ne voyez pas EQ ou Afficher sur le fonctionnement ou monad Typeclasses soit pour les mêmes raisons


Voici ce que Haskell 98 et Haskell 2010 précisent, à tort telle que possible.


@Bush, il n'y a pas de eq et Afficher les instances pour les fonctions, mais les numéros de codage par les fonctions sont un Trick bien connu .


@Bush Retiens Numbers ne peut être ni comparé à l'égalité ni à convertir en une chaîne (fini).


@Augusts: pourquoi pas? Je peux sûrement comparer même un numéro irrationnel comme √2 de le convertir en la représentation de chaîne "sqrt (2)" .


@Bergi Computing Egalité entre réels calculables est insuffisant.


@Bakuriu: OK, merci. J'ai simplifié le problème et seulement la pensée de calcul symbolique.



11
votes

Je pense que l'index de recherche de Hoogle est assez ancien.

Vous pouvez voir que eq et show Superclass est supprimé de num dans ces commits de GHC . < / p>

https://github.com/ghc/ghc/commit/0A40540E79223F387DB9A1756E4B https://github.com/ghc/ghc/commit/817C4E19A4248B80F0AF7648B80F0AF764A12721B1284B39E5A

Je considère donc que c'est la raison de l'incohérence entre le résultat de la recherche de HOOGILE et un lien réel à Hackage.


2 commentaires

Merci. Je vois le "-Class num A => BITS A Où" et "+ classe + (EQ A, Nombre A) => BITS A Où". Comme je le comprends - "-" est en train de supprimer et "+" ajoute. Donc, je vois a été supprimé "Classe num A => BITS A Où" Row de code et ajouté la "classe (EQ A, Nombre A) => BITS A Où". Ai-je raison?


@Bush c'est vrai, et très certainement parce que bits doit toujours être équatable après num n'est-ce pas.



3
votes

num est quelque chose que vous pouvez essentiellement ajouter et multiplier. Je pense que (+) devrait être un groupe , mais le Spécification ne le mentionne pas .

Pouvez-vous ajouter et multiplier des fonctions? Certainement oui, si les fonctions donnent un numéro.

Il n'y a pas de EQ et Afficher l'instance d'instance pour fonctionner dans HASKELLL, et c'est pourquoi num ne nécessite pas ces contraintes.

Vous voulez maintenant ord contraint aussi? Les numéros complexes sont num s, mais il n'y a pas de commande qui préserve les mêmes lois que les chiffres réels.


1 commentaires

Ajouter, multiplier et nier (donc soustraire).



8
votes

Voici un Num instance pour laquelle vous ne pouvez pas définir sensiblement soit un EQ ou Afficher instance - xxx

voici un peu plus ésotérique - xxx

Il possède les propriétés inhabituelles que l'addition et la multiplication ne sont pas commutatives (car chacun des deux arguments peut modifier arbitrairement le État, et l'état peut être mélangé arbitrairement avec le résultat renvoyé) mais sinon il s'agit d'une instance valide de num .

côté mathématique Remarque: le num Classe des modèles généralement des structures algébriques appelées Anneaux qui ont une addition commutative et une multiplication (pas nécessairement commutative), qui répondent à certaines règles de compatibilité.

Dans ce cas, l'addition n'est pas commutative, elle ne peut donc pas être une bague. Ce n'est même pas un proximité de Semiing (qui est une bague avec beaucoup de restrictions enlevé) parce que cela ne satisfait pas la loi sur la distribution. Qui soulève la question - obéir aux lois de tout structure algébrique raisonnablement bien connue?

Les deux sont des exemples de phénomène plus général que tout phénomène plus général peut être soulevé à une instance de num à l'aide de FMAP et lifta2 - xxx

qui est un fait que j'aime beaucoup.


1 commentaires

Cela devrait être la réponse sélectionnée.