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

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.

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

Successfully merging this pull request may close these issues.

1 participant