summaryrefslogtreecommitdiff
path: root/libraries/base/Data/Traversable.hs
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/base/Data/Traversable.hs')
-rw-r--r--libraries/base/Data/Traversable.hs25
1 files changed, 19 insertions, 6 deletions
diff --git a/libraries/base/Data/Traversable.hs b/libraries/base/Data/Traversable.hs
index b2cd20f0ac..152ddc31cc 100644
--- a/libraries/base/Data/Traversable.hs
+++ b/libraries/base/Data/Traversable.hs
@@ -82,8 +82,17 @@ import qualified GHC.List as List ( foldr )
-- $setup
-- >>> import Prelude
+-- XXX: Missing haddock feature. Links to anchors in other modules
+-- don't have a sensible way to name the link within the module itself.
+-- Thus, the below "Data.Traversable#overview" works well when shown as
+-- @Data.Traversable@ from other modules, but in the home module it should
+-- be possible to specify alternative link text. :-(
+
-- | Functors representing data structures that can be traversed from
--- left to right.
+-- left to right, performing an action on each element.
+--
+-- A more detailed description can be found in the overview section of
+-- "Data.Traversable#overview".
--
class (Functor t, Foldable t) => Traversable t where
{-# MINIMAL traverse | sequenceA #-}
@@ -461,7 +470,9 @@ foldMapDefault = coerce (traverse :: (a -> Const m ()) -> t a -> Const m (t ()))
------------------
-- $overview
--- @Traversable@ functors can be thought of as polymorphic containers that
+--
+-- #overview#
+-- Traversable functors can be thought of as polymorphic containers that
-- support mapping of applicative (or monadic) effects over the container
-- (element-wise) to create a new container of __the same shape__, with the
-- effects sequenced in a natural order for the container type in question.
@@ -549,6 +560,8 @@ foldMapDefault = coerce (traverse :: (a -> Const m ()) -> t a -> Const m (t ()))
------------------
-- $validation
+--
+-- #validation#
-- A hypothetical application of the above is to validate a structure:
--
-- >>> validate :: Int -> Either (String, Int) Int
@@ -581,9 +594,9 @@ foldMapDefault = coerce (traverse :: (a -> Const m ()) -> t a -> Const m (t ()))
-- The @Foldable@ instance should be defined in a manner that avoids
-- construction of an unnecesary copy of the container.
--
--- Perhaps the most widely used @Foldable@ methods are 'mapM_' and its flipped
--- version 'forM_'. Often, to sequence IO actions (that return no useful
--- results) over all the elements of a @Traversable@ container. One special
+-- The @Foldable@ method 'mapM_' and its flipped version 'forM_' can be used
+-- to sequence IO actions over all the elements of a @Traversable@ container
+-- (just for their side-effects, ignoring any results) . One special
-- case is a 'Maybe' container that optionally holds a value. Given:
--
-- > action :: a -> IO ()
@@ -838,7 +851,7 @@ foldMapDefault = coerce (traverse :: (a -> Const m ()) -> t a -> Const m (t ()))
-- * [1] \"The Essence of the Iterator Pattern\",
-- by Jeremy Gibbons and Bruno Oliveira,
-- in /Mathematically-Structured Functional Programming/, 2006, online at
--- <http://web.comlab.ox.ac.uk/oucl/work/jeremy.gibbons/publications/#iterator>.
+-- <http://www.cs.ox.ac.uk/people/jeremy.gibbons/publications/#iterator>.
--
-- * \"Applicative Programming with Effects\",
-- by Conor McBride and Ross Paterson,