Announcing core-extra

We’re pleased to anounce our new open source library, core-extra. Core-extra is a large collection of utility-style functions that pertain to the types that come with elm/core. You can think of it as Elm’s extended standard library.

History

elm/core has been a well designed and stable core (sorry) of Elm programming. There have always been missing functions though and even from Elm’s early days developers published libraries that were collections of utility functions designed to fill some of these gaps. However, the elm community has seen some comings and goings over the years and so these early libraries were inherited into the elm-community organization for an experiment of sorts in comunity maintenance.

This had some mixed results. Probably the most popular and best maintained was elm-community/list-extra. This went up to a respectable 8th major version and contains many, many functions. However, some of the other elm-community packages were significantly worse off, often with missing maintainers and issues and PRs just hanging on there for without resolution.

This situation was deemed somewhat untenabable and consensus was reached to slowly wind up the elm-community experiment. The idea was that individuals interested in maintaing the elm-community libraries should just fork them and maintain them under
their own name.

I’ve had somewhat of a different idea and proposed another experiment in community maintenance. The main idea is to combine all of the elm-community/*-extra packages, where * is anything that relates to elm/core into a single, larger library. This has some real benefits:

  • Many maintenance chores need to be only done once (for instance updating to elm-test v2).
  • Any of the maintainers can give feedback on a PR, so more people can be onboarded into the pool of maintainers.
  • We can achieve greater API consistency and make things easier to learn.
  • It reduces the number of dependencies other packages and applications need to deal with.

I then proceeded to unify these libraries and start performing some of the missing maintenance. This is how core-extra was born. Soon enough a few other maintainers joined and we agreed with @supermario to move the project under the elmcraft umbrella. @supermario this way maintains admin rights and he is probably one of the better people to maintain this continuity, since he has a long term financial interest in Elm.

What’s changed?

From an API perspective, almost nothing. core-extra 1.0.0 should be fully API compatible with any of the elm-community/*-extra libraries, i.e. the upgrade should be about as challenging as a minor version update. It does however deprecate a number of functions, and so we immediately release core-extra 2.0.0, which removes these deprecated functions. Please follow the README, which has detailed instructions as well as a fully automated migration script. We worked really hard to make upgrading as seamless as possible.

However, there a number of useful new highlights:

  1. The whole test suite has been upgraded to elm-test 2.0.0. This has found some gnarly bugs, especially in string processing code, which have been fixed. We have also updated all examples to use elm-verify-examples, making sure all documentation examples are correct. This makes the whole package exceedignly well tested, with over 1000 test cases, many of them fuzz.

  2. All code is now being automatically reviewed using elm-review, so there is much more internal consisteny in the codebase. We believe this makes it much easier for anyone to contribute high quality code.

  3. We have carefully reviewed the API for consistency, and have deprecated a few functions to tighten up the design. This should lead to a library that is more cohesive and predictable over all. This is an area where we expect more good things will come in the future.

  4. We have added a few useful functions, some highlights beeing: Array.Extra.andMap, Dict.Extra.all, Result.Extra.combineMapArray, String.Extra.removeDiacritics and more.

  5. We have also incorporated some non elm-community libraries:

    • GlobalWebIndex/cmd-extra
    • hayleigh-dot-dev/tuple-extra
    • stoeffel/set-extra
    • matthewsj/elm-ordering (albeit this one in a non-backwards compatible way - but don’t worry,
      they can be used side-by-side without conflict)
  6. Float.Extra is just a brand new addition.

All in all, we present a very nice library with features that will be useful in almost any Elm application. Check out the new docs.

Conclusion

If you use one of the packages mentioned here, I would strongly suggest you upgrade to this package.

I’d like to thank all the contributors to these source packages that made this possible (you can see their list in the README) as well as all of those who contributed to this present version.

66 Likes

Amazing, upgrade done, thanks!

1 Like

Awesome stuff thank you so much to all involved!

1 Like

Just wanted to add that although I’m helping facilitate custody through Elmcraft, I can take no credit at all for any of the work that went into this consolidation and release. Thanks to @gampleman for his thoughtful and diligent work & coordination, and all the other contributors who’ve helped :+1:

11 Likes

Well done and thanks for all the effort. I look forward to using this and consolidating my extra packages in elm.json into a single line too!

2 Likes

A major contribution to our community. Bravo!!

(Just looked at Float.Extra. Check out aboutEqual and toFixedDecimalPlaces! Very useful.)

5 Likes

If not for anything else, just for this function, I am going to have it in my codebase straight away :heart: Awesome work @gampleman

(and yes, I posted this and THEN I have read the post straight above mine :smiley: @jxxcarlson )

4 Likes

I create a lot of small Elm projects for fun, and I anticipate this library will be an automatic include in all of them going forward. Thank you so much!

2 Likes

This topic was automatically closed 10 days after the last reply. New replies are no longer allowed.