Quark/witchcraft/algae alternatives?

Hello guys! Are there more complete and working implementations of common functional programming combinators, type classes and ADTs than quark/witchcraft/algae? Those projects just looks pretty abandoned, implementation is poor and buggy, and some features are not working in modern Elixir at all. But I can’t find more complete alternatives :frowning:

Hi!

Unfortunately I think you’re currently out of luck :slightly_frowning_face:.
I wrote the ADT-library FunLand which actually predates Witchcraft and has a bit of a different approach, but it is also not completely finished; I hope to rewrite it when I have the time for it.

A major hurdle that these libraries face is that while their tools can greatly improve your code, learning to use them is an extra learning curve. Essentially it makes your code more difficult to understand except for people that besides working with Elixir have a ‘pure’ FP background.

While this is a hurdle, I nevertheless think that there is big value in a proper library with functional tools, especially if it can be constructed in such a way that it would actually help newcomers to get used to working with algebraic datatypes and the likes.

What are the exact things you are struggling with?

3 Likes

Well, except fact that Erlang and Elixir are untyped languages, the most annoying thing is excess of low-level boilerplate code. Usually it is with or case expressions or just multiple clauses of pattern matching in function header. The most common example is pattern matching on tagged union like {:ok, a} | {:error, b}. This boilerplate code makes me sad, because I see these tagged unions and want to say to person who wrote it: “hey, dude, you don’t need another nested case expression, please use bind function instead, please, why you continue to write boilerplate case expressions, do you hate yourself, huh?”

Btw, you did great job with your library. I started my own functional Wonderland library as well :grinning:

2 Likes