Skip to content

Conversation

UnrelatedString
Copy link

Description of the change

Rewrote the faulty

instance applyNonEmptyList :: Apply NonEmptyList where
  apply (NonEmptyList (f :| fs)) (NonEmptyList (a :| as)) =
    NonEmptyList (f a :| (fs <*> a : Nil) <> ((f : fs) <*> as))

to

instance applyNonEmptyList :: Apply NonEmptyList where
  apply (NonEmptyList (f :| fs)) (NonEmptyList (a :| as)) =
    NonEmptyList (f a :| map f as <> apply fs (a : as))

and likewise for the lazy equivalent.

A cleaner redo of my earlier PR #221.


Checklist:

  • Added the change to the changelog's "Unreleased" section with a reference to this PR (e.g. "- Made a change (#0000)")
  • Linked any existing issues or proposals that this pull request should close
  • Updated or added relevant documentation
  • Added a test for the contribution (if applicable)

@UnrelatedString UnrelatedString changed the title Fixed apply nel Law-abiding Apply NonEmptyList that agrees with Apply List May 2, 2025
@UnrelatedString
Copy link
Author

To clarify: the existing instance violates the law (<<<) <$> f <*> g <*> h = f <*> (g <*> h) and produces outputs in a different order than Apply Array.

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