Skip to content
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

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

cdepillabout
Copy link

@cdepillabout cdepillabout commented May 4, 2024

This PR fixes up some of the documentation around the interaction of the non-capturing monadic bind (>>) for Action, and the need 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 both need [foo, bar], and need [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.

-- 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\"]@
Copy link
Author

@cdepillabout cdepillabout May 4, 2024

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

image

See how the needs 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.

Comment on lines -374 to +380
-- 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.
Copy link
Author

@cdepillabout cdepillabout May 4, 2024

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 needs 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 use need internally, like readFileLines.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant