-
Notifications
You must be signed in to change notification settings - Fork 119
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in 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.