SaaSHub helps you find the best software and product alternatives Learn more →
Top 8 functional-language Open-Source Projects
-
awesome-functional-programming
Yet another resource for collecting articles, videos etc. regarding functional programming
-
InfluxDB
Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.
-
LtuPatternFactory
Lambda the ultimate Pattern Factory: FP, Haskell, Typeclassopedia vs Software Design Patterns
-
xl
A minimalist, general-purpose programming language based on meta-programming and parse tree rewrites
-
WorkOS
The modern identity platform for B2B SaaS. The APIs are flexible and easy-to-use, supporting authentication, user identity, and complex enterprise features like SSO and SCIM provisioning.
You probably noticed that .SetName() returns a Either. You may have come across Unit in libraries like MediatR or Language-Ext. It's a simple construct representing a type with only one possible value. We use it as a placeholder for operations that do not return a value but may return another state. In our example, .SetName() is a Command that does not return a value but may fail. Therefore, the monad Either carries two possible states: Right (without value) or Left (with an Error).
From what I can read the author got really unlucky with some kind of radical API changes. Maybe at that time the LLVM team was a bit less serious with deprecations ?
I use LLVM since v9, nowadays I'm stuck on v15 (that's not because of LLVM btw).
Between the two versions there's been a radical change too, i.e "opaque pointers", but the transition was rather smooth as we were provided, for a long time, the two versions of the functions affected by the change. Maybe the LLVM team got more serious since the author experienced the said difficulties ?
Other thing I note is that the author uses the CPP API. I use the C one which exposes only a high-level subset of the CPP one. This encourages a saner use of LLVM, a more concrete separation between the front-end and the mid-end, although sometimes there are limitations.
A simple example of what encourages the C API, especially since opaque ptrs are added, is not to rely on LLVM to retrieve the IR type of an IR value. That should always be done using the AST, eg with an `.ir` field in your nodes.
Another one I remark, after a brief overview of LLVM-CRAP, is that the author had to change the internal data structure used, depending on the LLVM version [0]. Using the C API that would never had happened. The C API essentially allows to create block refs, instructions refs, value refs, type refs, contexts. Then you choose the containers you want to use to hold them. No need to switch to another stdcpp one, even if internally LLVM does so.
[0]: https://github.com/c3d/xl/blob/master/src/llvm-crap.cpp#L265
functional-languages related posts
- Why don't you just use F#?
- Option<T> monad for Unity/UniTask
- Result pattern: language-ext vs FunctionalExtensions?
- Don't sleep on Linq query syntax if you regularly iterate through large/complex data sources
- What C# feature blew your mind when you learned it?
- It's actually not that bad...
- How to Represent Functional Boolean · Discussion #1173 · louthy/language-ext
-
A note from our sponsor - SaaSHub
www.saashub.com | 26 Apr 2024
Index
What are some of the best open-source functional-language projects? This list will help you:
Project | Stars | |
---|---|---|
1 | language-ext | 6,159 |
2 | awesome-functional-programming | 3,419 |
3 | lux | 1,636 |
4 | LtuPatternFactory | 976 |
5 | functional-programming-learning-path | 973 |
6 | quark | 325 |
7 | xl | 242 |
8 | lambdacube-compiler | 84 |
Sponsored