« retour un » est censé envelopper un dans le cadre de certains Monad:Pourquoi "return Nothing" ne renvoie rien?
*Main> :i return
class Applicative m => Monad (m :: * -> *) where
...
return :: a -> m a
...
-- Defined in ‘GHC.Base’
Si je demande GHCi ce que le type de « retour Rien » est, il est conforme à ce que:
*Main> :t return Nothing
return Nothing :: Monad m => m (Maybe a)
Mais si je l'évaluer, je ne vois pas Monad extérieur, juste peut-être intérieur:
*Main> return Nothing
Nothing
par défaut ghci à l'IO monade si vous ne spécifiez pas. Il suffit d'imprimer le contenu d'un 'IO (Maybe a)' – 4castle
@ 4castle Pour fausser légèrement le shachaf: Un 'IO (Maybe a)' contient un 'Maybe a' de la même manière que'/bin/ls' contient une liste des fichiers. Cela peut sembler un peu pédant, mais il n'imprime pas le contenu de 'IO (Maybe a)'. Il exécute un 'IO (Maybe a)' et en imprime les résultats. La distinction peut être importante. –
@DavidYoung Personnellement, je ne trouve pas la distinction importante, car c'est le travail de la monade des OI de connaître la représentation interne de la valeur. À des fins de raisonnement, je pense habituellement à toutes les monades en tant que contenants (qu'elles contiennent ou non la valeur). – 4castle