38 votes

Ne la gratuit monade existent toujours?

Nous savons à partir de la catégorie de la théorie que tous les endofunctors dans le Jeu admet un gratuit monade. Le contre-exemple canonique est l'ensemble des parties foncteur.

Mais Haskell peut transformer n'importe quel foncteur une monade.

data Free f a = Pure a | Free (f (Free f a))
instance Functor f => Monad (Free f) where
  return = Pure
  Pure a >>= f = f a
  Free m >>= f = Free ((>>= f) <$> m)

Ce qui rend ce travail de construction pour tout Haskell foncteur mais briser dans l' Ensemble?

4voto

dfeuer Points 1456

Il est devenu clair que cette réponse est fausse. Je pars ici de préserver de précieux discussion dans les commentaires jusqu'à ce que quelqu'un formule une correcte réponse.


Considérer la puissance en Set. Si nous avons une fonction f : S -> T, nous pouvons former f' : PS S -> PS T par f' X = f [X]. Nice foncteur covariant (je pense). On pourrait aussi former f'' X = f^(-1) [X], une belle foncteur contravariant (je pense).

Regardons le "pouvoir" en Haskell:

newtype PS t = PS (t -> Bool)

Ce n'est pas un Functor, mais seulement un Contravariant:

instance Contravariant PS where
  contramap f (PS g) = PS (g . f)

Nous reconnaissons cela, car t est en position négative. Contrairement aux Set, nous ne pouvons pas avoir à les "éléments" de la caractéristique fonctions qui composent la puissance, de sorte que le foncteur covariant n'est pas disponible.

Je conjecture, par conséquent, que la raison Haskell admet un gratuit monade pour chaque foncteur covariant est qu'elle exclut les foncteurs covariants qui causent des problèmes pour Set.

1voto

Vlad Patryshev Points 717

J' (plutôt) un soupçon que ce n'est pas exactement une définition. Dire, cette formule récursive spécifie un fixpoint; maintenant, comment savons-nous ce fixpoint existe? Comment savons-nous il n'y a qu'un fixpoint? Et de plus, comment est - Free m >>= définir quoi que ce soit, sauf peut-être dans le cas où nous supposons que nous n'avons pas fini de séquences d'applications d' Free?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X