mzero
является частью класса типов MonadPlus
, определенного в Control.Monad
.
> import Control.Monad
> :info MonadPlus
class (GHC.Base.Alternative m, Monad m) =>
MonadPlus (m :: * -> *) where
mzero :: m a
mplus :: m a -> m a -> m a
. Он служит идентификатором для функции mplus
, так что mplus mzero x == x
и mplux x mzero == x
.
Использование mzero
в случаях FromJSON
упоминается в документации:
При написании экземпляра используйте empty, mzero или не можете сделатьсбой преобразования, например, если в объекте отсутствует требуемый ключ или значение неправильного типа.
Таким образом, в вашем цитируемом экземпляре
instance FromJSON Colour where
parseJSON (String s) = return $ case s of
"blue" -> Blue
"green" -> Green
_ -> Yellow
parseJSON _ = mzero
mzero
означает, чтоникакое значение JSON, кроме String
, не может быть интерпретировано как кодирование значения Colour
.