Skip to content

Proposal: Rename Foldable1 and Bifoldable1 and then move them into base #9

@gwils

Description

@gwils

I propose that we move Foldable1 and Bifoldable1 from semigroupoids to base, as has been discussed many times over the years, and has most recently been championed by @phadej. His write-up found here contains a large collection of useful links to context and prior discussion. I invite you to read that; I couldn't possibly summarise all the discussion here.

Before we move these classes to base, I propose that we get their names right, along the lines discussed by @chessai and others on this semigroupoids issue (Foldable1 -> Semifoldable, Bifoldable1 -> Semibifoldable, with matching renamings for class members).

Hence this proposal involves multiple steps:

  1. Release version 6.0.0 of semigroupoids with a mass-renaming (Foldable1 to Semifoldable, Bifoldable1 to Semibifoldable, etc.)
  2. Update downstream packages of semigroupoids to use the new major version and hence the naming scheme.
  3. Let the ecosystem settle for a while.
  4. Move Semifoldable and Semibifoldable to base.

We could alternatively do the renaming and relocation as one step, but this approach leads to a rather unfortunate migration path for users. I would prefer they be two simple and discrete steps, giving the considerable downstream package ecosystem time to breathe in between.

This proposal an additive (non-breaking) change to base, and so that step is relatively easy. Moving other classes from semigroupoids to base is explicitly out of scope for this proposal. Most or all other classes (such as Semitraversable) require breaking changes elsewhere in the hierarchy (such as wedging Semiapplicative into the Monad hierarchy).

I note that this is as much a proposal about semigroupoids as it is about base; hence we would need the support of the semigroupoids maintainers(cc. @ekmett).

Metadata

Metadata

Assignees

No one assigned

    Labels

    approvedApproved by CLC votebase-4.18Implemented in base-4.18 (GHC 9.6)

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions