purescript-lists
purescript-lists copied to clipboard
Law-abiding `Apply NonEmptyList` that agrees with `Apply List`
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:
- [x] 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
- [x] Added a test for the contribution (if applicable)
To clarify: the existing instance violates the law (<<<) <$> f <*> g <*> h = f <*> (g <*> h) and produces outputs in a different order than Apply Array.