Skip to content

Free Apply, Alt, Plus, and Bind#191

Open
mstksg wants to merge 2 commits into
ekmett:masterfrom
mstksg:newfree
Open

Free Apply, Alt, Plus, and Bind#191
mstksg wants to merge 2 commits into
ekmett:masterfrom
mstksg:newfree

Conversation

@mstksg

@mstksg mstksg commented May 24, 2019

Copy link
Copy Markdown
Contributor

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