diff options
author | Jade Lovelace <jadel@mercury.com> | 2022-10-31 17:16:55 -0700 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2022-11-08 12:55:18 -0500 |
commit | 080fffa1015bcc0cff8ab4ad1eeb507fb7a13383 (patch) | |
tree | 92c85e3fb13478dbdac84093e73d660afa6e573a | |
parent | bb5888c5782762125b81857b60400d621b4ac02e (diff) | |
download | haskell-080fffa1015bcc0cff8ab4ad1eeb507fb7a13383.tar.gz |
Document what Alternative/MonadPlus instances actually do
-rw-r--r-- | libraries/base/GHC/Base.hs | 26 | ||||
-rw-r--r-- | libraries/base/GHC/Conc/Sync.hs | 8 |
2 files changed, 26 insertions, 8 deletions
diff --git a/libraries/base/GHC/Base.hs b/libraries/base/GHC/Base.hs index 589c889cf8..6cc195d362 100644 --- a/libraries/base/GHC/Base.hs +++ b/libraries/base/GHC/Base.hs @@ -1120,7 +1120,9 @@ class Applicative f => Alternative f where some_v = liftA2 (:) v many_v --- | @since 2.01 +-- | Picks the leftmost 'Just' value, or, alternatively, 'Nothing'. +-- +-- @since 2.01 instance Alternative Maybe where empty = Nothing Nothing <|> r = r @@ -1152,7 +1154,9 @@ class (Alternative m, Monad m) => MonadPlus m where mplus :: m a -> m a -> m a mplus = (<|>) --- | @since 2.01 +-- | Picks the leftmost 'Just' value, or, alternatively, 'Nothing'. +-- +-- @since 2.01 instance MonadPlus Maybe --------------------------------------------- @@ -1214,12 +1218,16 @@ instance Monad [] where {-# INLINE (>>) #-} (>>) = (*>) --- | @since 2.01 +-- | Combines lists by concatenation, starting from the empty list. +-- +-- @since 2.01 instance Alternative [] where empty = [] (<|>) = (++) --- | @since 2.01 +-- | Combines lists by concatenation, starting from the empty list. +-- +-- @since 2.01 instance MonadPlus [] {- @@ -1602,12 +1610,18 @@ instance Monad IO where (>>) = (*>) (>>=) = bindIO --- | @since 4.9.0.0 +-- | Takes the first non-throwing 'IO' action\'s result. +-- 'empty' throws an exception. +-- +-- @since 4.9.0.0 instance Alternative IO where empty = failIO "mzero" (<|>) = mplusIO --- | @since 4.9.0.0 +-- | Takes the first non-throwing 'IO' action\'s result. +-- 'mzero' throws an exception. +-- +-- @since 4.9.0.0 instance MonadPlus IO returnIO :: a -> IO a diff --git a/libraries/base/GHC/Conc/Sync.hs b/libraries/base/GHC/Conc/Sync.hs index 5fe89aa4c3..b587da0785 100644 --- a/libraries/base/GHC/Conc/Sync.hs +++ b/libraries/base/GHC/Conc/Sync.hs @@ -733,12 +733,16 @@ thenSTM (STM m) k = STM ( \s -> returnSTM :: a -> STM a returnSTM x = STM (\s -> (# s, x #)) --- | @since 4.8.0.0 +-- | Takes the first non-'retry'ing 'STM' action. +-- +-- @since 4.8.0.0 instance Alternative STM where empty = retry (<|>) = orElse --- | @since 4.3.0.0 +-- | Takes the first non-'retry'ing 'STM' action. +-- +-- @since 4.3.0.0 instance MonadPlus STM -- | Unsafely performs IO in the STM monad. Beware: this is a highly |