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

Free Apply, Alt, Plus, and Bind #191

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open

Conversation

mstksg
Copy link
Contributor

@mstksg mstksg commented May 24, 2019

Just added a couple of data types that I've found useful as free structures, that might benefit from being defined in a unified place.

  1. The free Apply is constructed based on how NonEmpty is constructed in base: it just convolves a single f x in front of an Ap. It's basically a "non-empty Ap"
  2. The free Plus (which I call ListF in this PR) arises from the free monoid of functors combined with :*:/Product, like how Free Monad is the free monoid against :.:/Compose and Free Applicative is the free monoid against Day.
  3. The free Alt arises from the free semigroup of functors combined with :*:, like how Apply is the free semigroup w.r.t. Day.
  4. (edit: added later) The free Bind is inspired by iteratees: it can either be "done" with a final computation, or "more" with more computations to consume.

I tried to style the API after the exports in Control.Alternative.Free as reference.

Thanks for the great package :)

@mstksg mstksg changed the title Free Apply, Alt, and Plus Free Apply, Alt, Plus, and Bind Jun 11, 2019
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