„zwróci” ma zawinąć w kontekście jakiegoś Monady:Dlaczego "return nothing" nic nie zwraca?
*Main> :i return
class Applicative m => Monad (m :: * -> *) where
...
return :: a -> m a
...
-- Defined in ‘GHC.Base’
Jeśli pytam GHCI co rodzaj „powrót nic” jest, jest on zgodny, że:
*Main> :t return Nothing
return Nothing :: Monad m => m (Maybe a)
Ale jeśli ją oceniać, nie widzę zewnętrzną monady, tylko wewnętrzna Może:
*Main> return Nothing
Nothing
GHCi domyślnie monady IO jeśli nie podasz. To jest po prostu drukowanie zawartości 'IO (może a)' – 4castle
@ 4castle Aby nieco zinterpretować shachaf: 'IO (Maybe a)' zawiera 'Maybe a' w ten sam sposób, w jaki'/bin/ls' zawiera listę plików. Może to brzmieć nieco pedantycznie, ale nie jest to drukowanie zawartości 'IO (Maybe a)'. Działa 'IO (Maybe a)', a następnie drukuje wyniki tego. Rozróżnienie może być ważne. –
@DavidYoung Nie osobiście uważam, że rozróżnienie jest ważne, ponieważ zadaniem monady IO jest poznanie wewnętrznej reprezentacji wartości. Dla celów rozumowania zwykle uważam wszystkie monady za pojemniki (niezależnie od tego, czy zawierają one wartość, czy nie). – 4castle