Skip to content

Commit

Permalink
Update documentation around non-capturing monadic bind for Action
Browse files Browse the repository at this point in the history
  • Loading branch information
cdepillabout committed May 4, 2024
1 parent 702eff2 commit 153ff6c
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 4 deletions.
10 changes: 8 additions & 2 deletions src/Development/Shake/Internal/Core/Types.hs
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,14 @@ import Prelude
-- To raise an exception call 'error', 'fail' or @'liftIO' . 'throwIO'@.
--
-- The 'Action' type is both a 'Monad' and 'Applicative'. Anything that is depended upon applicatively
-- will have its dependencies run in parallel. For example @'need' [\"a\"] *> 'need [\"b\"]@ is equivalent
-- to @'need' [\"a\", \"b\"]@.
-- will have its dependencies run in parallel. For example,
-- @'Development.Shake.Internal.Rules.File.need' [\"a\"] '*>' 'Development.Shake.Internal.Rules.File.need' [\"b\"]@
-- is equivalent to @'need' [\"a\", \"b\"]@.
--
-- Note that since Shake 0.18, the non-capturing monadic bind ('>>') will also run its dependencies in parallel.
-- For example,
-- @'Development.Shake.Internal.Rules.File.need' [\"a\"] '>>' 'Development.Shake.Internal.Rules.File.need' [\"b\"]@
-- is also equivalent to @'Development.Shake.Internal.Rules.File.need' [\"a\", \"b\"]@.
newtype Action a = Action {fromAction :: RAW ([String],[Key]) [Value] Global Local a}
deriving (Functor, Applicative, Monad, MonadIO, Typeable, Semigroup, Monoid, MonadFail)

Expand Down
9 changes: 7 additions & 2 deletions src/Development/Shake/Internal/Rules/File.hs
Original file line number Diff line number Diff line change
Expand Up @@ -371,8 +371,13 @@ fileForward help act = addUserRule $ FileRule help $ fmap ModeForward . act
-- 'Development.Shake.cmd' \"rot13\" [src] \"-o\" [out]
-- @
--
-- Usually @need [foo,bar]@ is preferable to @need [foo] >> need [bar]@ as the former allows greater
-- parallelism, while the latter requires @foo@ to finish building before starting to build @bar@.
-- Note that the following expressions are all equivalent. @foo@ and @bar@ are built in parallel:
--
-- - @need [foo,bar]@
-- - @need [foo] '*>' need [bar]@
-- - @need [foo] '>>' need [bar]@
--
-- In this situation, @need [foo, bar]@ is preferable, since the parallelism is the most obvious.
--
-- This function should not be called with wildcards (e.g. @*.txt@ - use 'getDirectoryFiles' to expand them),
-- environment variables (e.g. @$HOME@ - use 'getEnv' to expand them) or directories (directories cannot be
Expand Down

0 comments on commit 153ff6c

Please sign in to comment.