Skip to content

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