Extends [[Alt]] with an empty value: ```haskell class Alt f <= Plus f where empty :: forall a. f a ``` > [!info] > Conceptually, this lives next to [[Applicative|pure]] in my mind; in [[Maybe]] for example `pure` and `empty` are aliases for `Just` and `Nothing`. In [[Array]], `empty` is empty array `[]`. In [[Maybe]], `empty` is `Nothing`. The most common place you'll see `empty` is when using [[MaybeT]] as an early return: ```haskell logDebug :: String -> Effect Unit logDebug msg = void $ runMaybeT do env <- MaybeT $ Process.lookupEnv "NODE_ENV" when (env /= "DEVELOPMENT") empty lift $ Console.log msg ``` this is equivalent to: ```haskell logDebug :: String -> Effect Unit logDebug msg = do menv <- Process.lookupEnv "NODE_ENV" case menv of Just env -> if env == "DEVELOPMENT" then Console.log msg else pure unit Nothing -> pure unit ``` > [!info] > Note that [guard](https://pursuit.purescript.org/packages/purescript-control/docs/Control.Alternative#v:guard) is a shorthand available for `when (..) empty`