Question

Je suis un peu confus, et besoin de quelqu'un pour me droite.Permet de décrire ma compréhension actuelle:

E est un endofunctor, et A est certains de la catégorie:

E : A -> A.

Depuis tous les types et morphisms en Haskell sont dans le Hask catégorie, n'est pas tout foncteur en Haskell également un endofunctor? F : Hask -> Hask.

J'ai un bon sentiment que je me trompe, et de simplifier à l'extrême ce en quelque sorte, et j'aimerais que quelqu'un me dise quel idiot je suis.Merci.

Était-ce utile?

La solution

Vous pouvez préciser si vous demandez à propos de "foncteurs en Haskell", ou Functors.Il n'est pas toujours clair dans quelle catégorie est pris en charge lors de la Catégorie de la Théorie termes sont utilisés en Haskell.

Mais oui, l'hypothèse par défaut est Hask, qui est la catégorie de Haskell types avec des fonctions comme morphisms.Dans ce cas, un endofunctor F sur Hask serait mapper n'importe quel type Un à un type de F(A) et toute fonction f entre les deux types A et B d'une fonction F(f entre certains types de F(A) et F(B).

Si nous nous limitons aux seuls endofunctors de la carte à n'importe quel type a pour un type de (f a)f est un constructeur de type avec l'aimable * -> *, puis, nous pouvons décrire les associés de la carte pour des fonctions comme une fonction d'ordre supérieur de type (a -> b) -> (f a -> f b), ce qui est évidemment le type de classe appelé Functor.

Cependant, on peut facilement imaginer bien comportés endofunctors sur Hask qui ne peuvent pas être écrits (directement) comme une instance de Functor, comme un foncteur de la cartographie d'un type a pour Either a t.Et alors il n'y a évidemment pas beaucoup de sens dans un foncteur de Hask à une autre catégorie entièrement, il est raisonnable d'envisager une (contravariant) foncteur de Hask pour Haskop.

Au-delà, les instances de Functor forcément la carte de l'ensemble de la catégorie Hask sur certains sous-ensemble de ce que, par conséquent, également les formes d'une catégorie.Mais il est également raisonnable de parler de foncteurs entre des sous-ensembles de Hask.Par exemple, considérons un foncteur qui envoie des types Maybe a pour [a].

Vous pouvez prendre connaissance de la category-extras package, qui offre une certaine Catégorie de la Théorie des structures d'inspiration intégré au sein de Hask au lieu de supposer que l'intégralité.

Autres conseils

Même si en fin de compte, vous pouvez manipuler Hask, il y a beaucoup d'autres catégories qui peuvent être construites sur Hask, qui peuvent être significatifs pour le problème à la main:

  • Hask^op, ce qui est Hask avec toutes les flèches inversées
  • Hask * Hask, les foncteurs sont bifunctors
  • Virgule catégories, c'est à dire.les objets sont morphisms à un objet fixe a, morphisms sont commutative triangles
  • Foncteur catégories, morphisms sont les transformations naturelles
  • L'algèbre catégories
  • Monoidal catégories
  • Kleisli catégories
  • ...

récupérer une copie de Mac Lane Catégories pour le Travail de Mathématicien des définitions, et d'essayer de trouver par vous-même le problème à résoudre en Haskell.Surtout s'étouffer adjoint foncteurs (qui sont en première/terminale objets dans la bonne catégorie) et leur relation avec les monades.

Vous verrez que même si il y a une grande catégorie (Hask, ou peut-être "levé les objets de Hask avec les flèches droite/produits/...", qui encapsule la langue de choix de Haskell tels que la non-rigueur et de la paresse), une bonne dérivé catégories sont expressifs.

Un éventuellement possible (ou au moins intéressant) discussion en ce qui concerne spécifiquement les monades est trouvé dans le livre "les Monades n'ont pas besoin d'être endofunctors":

http://www.cs.nott.ac.uk/~txa/publ/Relative_Monads.pdf

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top