Skip to content

Address some of the fusion issues in #202 - #241

Merged
hvr merged 13 commits into
haskell:masterfrom
nomeata:issue202
Jun 21, 2019
Merged

hvr merged 13 commits into
haskell:masterfrom
nomeata:issue202

Conversation

@nomeata

@nomeata nomeata commented Nov 16, 2018 •

Copy link
Copy Markdown
Contributor

in most cases, just updating the docs. More interesting stuff for takeWhileEnd and length, see the corresponding commits. See #202.

it is marked as `NOINLINE` and has no rules that match on it otherwise,
so no fusion can happen.
it would previously replace `takeWhileEnd p` with

    S.reverse . S.takeWhile p . S.reverseStream

But `S.reverse` can only fuse with its argument, and `S.reverseStream`
only fuses with its consumer. So all possible fusion is within this
pipeline, and in the best case we obtain a direct implementation.

There might be some value in this if we had a
`S.reverseStream/S.reverse` rule, so that in multiple chained invocations
of `takeWhileEnd` we could eliminate some intermediat steps. But no such
rule exists at the moment.
There is a comment that

> length needs to be phased after the `compareN/length` rules otherwise
> it may inline before the rules have an opportunity to fire.

but these rules are marked `[~1]`, so we can inline `length` in phase 1
to expose the `stream` in its definition and actually allow it to fuse.
This mirrors commits 1e10823, just for
strict functions.
as it does a case match.
because `dropWhileEnd` is not.
it was matching on `singleton`, but `singleton` gets rewritten to
`s.singleton`. An additional rule makes this robust.
because the rules for `dropWhile` are only enabled before phase 1
nomeata added a commit to nomeata/inspection-testing that referenced this pull request Nov 17, 2018
@nomeata

nomeata commented Mar 20, 2019

Copy link
Copy Markdown
Contributor Author

Is this mergeable?

@hvr hvr mentioned this pull request Jun 16, 2019
@hvr
hvr merged commit 7c86915 into haskell:master Jun 21, 2019
@hvr

hvr commented Jun 23, 2019

Copy link
Copy Markdown
Member

@nomeata yes, it's mergeable... thanks :-)

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.

2 participants