46 votes

Comment extraire de la valeur de l'action monadique

Existe-t-il une fonction intégrée avec la signature :: (Monad m) => m a -> a ?

Hoogle dit qu'il n'y a pas une telle fonction.

Pouvez-vous expliquer pourquoi?

26voto

Owen Points 14439

Il y a probablement une meilleure réponse que celle-ci, mais une façon de voir pourquoi vous ne pouvez pas avoir un type (Monad m) => m a -> a est de considérer une monade nulle :

 data Null a = Null

instance Monad Null where
    return a = Null
    ma >>= f = Null

Maintenant (Monad m) => m a -> a signifie Null a -> a , c'est-à-dire obtenir quelque chose à partir de rien. Vous ne pouvez pas faire ça.

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