-
Notifications
You must be signed in to change notification settings - Fork 120
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
Update documentation around non-capturing monadic bind for Action #849
base: master
Are you sure you want to change the base?
Conversation
-- 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\"]@ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I needed to fully qualify the path to need
here, since it appears that Haddock can't figure it out:
https://hackage.haskell.org/package/shake-0.19.8/docs/Development-Shake.html#t:Action
See how the need
s on the last line here aren't actually links, since Haddock doesn't seem to know where it should link to? Writing these as fully-qualified references should fix this.
-- 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. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I had also wanted to add a note here saying something like:
If you do require that two separate
need
s are built sequentially, you can put another (non-need
)Action
in between, like the following:do need [foo] liftIO (putStr "") need [bar]
However:
- I wasn't sure what would be the best way to write this "no-op" Action (
liftIO putStr
seems kind of hacky) - This isn't something that just affects
need
, it also affects all the other actions that useneed
internally, likereadFileLines
.
This PR fixes up some of the documentation around the interaction of the non-capturing monadic bind (
>>
) forAction
, and theneed
Action
.From https://neilmitchell.blogspot.com/2019/05/shake-with-applicative-parallelism.html, it appears that since Shake 0.18,
need [foo] >> need [bar]
is intepreted the same way as bothneed [foo, bar]
, andneed [foo] *> need [bar]
. There were a few places left in the Haddocks that weren't yet updated about this, so I've fixed this in this PR.