prowdsponsor / esqueleto

Bare bones, type-safe EDSL for SQL queries on persistent backends.
http://hackage.haskell.org/package/esqueleto
BSD 3-Clause "New" or "Revised" License
178 stars 51 forks source link

Ripping the name-clashes bandaid off #128

Open bitemyapp opened 8 years ago

bitemyapp commented 8 years ago

screenshot from 2016-02-01 20-48-46

I use Yesod, Aeson, Persistent, lens, and Esqueleto in my day to day work. Esqueleto is the only library that clashes with anything else I use. This is beginning to drive me nuts.

Would you consider a major version change to finally give Esqueleto its own names and operators that don't overlap with anything else?

meteficha commented 8 years ago

Doesn't bother me much, as you'd expect from the fact that I didn't change them :). There are also two practical issues with changing them:

bitemyapp commented 8 years ago

@meteficha I know these are costly issues but I'd rather do it sooner than later to avoid the problem growing. The number of Haskellers and Haskell projects out there is growing and will be growing faster over time.

I am happy to help with both issues if you're willing to commit to a release that deals with this.

My suggestion:

First release of the new names/operators

Database.Esqueleto.Functions and Database.Esqueleto.Operators are added, there's a single module that exports both. These are exclusively the new, non-conflicting names. I'd like it if all operators had an ordinary named prefix function that does the same thing as well, so that the operators are only nice syntax, not obligatory.

Database.Esqueleto stays the same.

Bandaid gets ripped off, next major release

Functions and Operators stay as they are, but Database.Esqueleto now re-exports those names.

How does this sound to you?

bitemyapp commented 8 years ago

@meteficha could I get a thumbs up/down on this please? If there's an alternative approach you'd be open to, I'd like to hear that as well but this remains a day-to-day albatross at work.

meteficha commented 8 years ago

I'm really not a fan of having two names for the same things. That will make it confusing to read and write. Furthermore, esqueleto will appear less like SQL. So the Functionsmodule is not going to happen.

Regarding the operators, I'm at a loss about a set of operators that look nice and don't conflict with the plethora of libraries that already exist. I'm not looking forward to searching for this set myself. The decision about whether to transition esqueleto to a new set is dependent on what the new set is. I can't commit to making a change I know almost nothing about.