three-layer
:three: :cake: Architecture of the Haskell web applications (by Holmusk)
linear
Low-dimensional linear algebra primitives for Haskell. (by ekmett)
three-layer | linear | |
---|---|---|
4 | 8 | |
301 | 195 | |
0.0% | - | |
0.0 | 5.4 | |
about 3 years ago | 17 days ago | |
Haskell | Haskell | |
BSD 3-clause "New" or "Revised" License | BSD 3-clause "New" or "Revised" License |
The number of mentions indicates the total number of mentions that we've tracked plus the number of user suggested alternatives.
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
three-layer
Posts with mentions or reviews of three-layer.
We have used some of these posts to build our list of alternatives
and similar projects. The last one was on 2022-12-13.
-
My Module Structure Does Not Feel Haskell-like
I’m working on this pet project for a time now. Initially based on the three-layer repository, it’s now modelled after the Clean Architecture. In my understanding, it’s an OOP variation of the functional “Functional Core, Imperative Shell” approach. As most examples for Clean Architecture are written in C#, my module structure also looks more like a typical C# than Haskell one to me.
-
Advanced programming exercises/apps recommendations to code
I personally use servant whenever i need networking. Altough scotty is easier/simpler, I would start with scotty. Aeson for JSON encoding/decoding. Actually! As i am writing this I would recommend a book (no its not a dry boring book, more of a tutorial) that implements a CI server from scratch. It’s vety descriptive and will show you the haskell ecosystem quite clearly: https://marcosampellegrini.com/simple-haskell-book. Seriously, it’s a damn good book and that’s how i learned haskell! Back to the libraries/ecosystem, if you want to learn how to use an app monad and mtl, these who come to mind: https://github.com/Holmusk/three-layer and https://www.parsonsmatt.org/2018/03/22/three_layer_haskell_cake.html. Under the github repo, check out the App folder to get a notion of how an app monad can be used. Personally I like mtl over monad transformers such as readerT. Best of luck!
-
Looking for opinionated webapp stack
I usually make web apps in haskell + react, when i started out learning haskell I found it invaluable to find a opinionated stack to learn about the ecosystem and to see "how to get things done". When i was learning haskell I really appreciated an example like: https://github.com/Holmusk/three-layer, essentially a "best practice" web app. Anyone in the clojure(script) community that can recommend some templates/examples to get to know the ecosystem? Since im comfortable with react im assuming clojurescript with re-frame/reagent makes sense for the frontend? So far i've only seen ring/jetty for the backend. To be clear, im not necessarily looking for the "simplest" frameworks but rather something that is highly reliable in production. The backend will expose simple JSON crud with some endpoints being quite computationally heavy (concurrency will be important).
-
Baking metaphors in the imperative/declarative programming debate
In Haskell, Matt Parsons popularised the Three Layer Haskell Cake (2018). Holmusk (well, Kowainik) made this picture to go along:
linear
Posts with mentions or reviews of linear.
We have used some of these posts to build our list of alternatives
and similar projects. The last one was on 2022-08-11.
-
GHC.Num: Why no multiplication commutativity?
Linear.Quaternion.Quaterion from the linear package has a Num instance, and quaternion multiplication is noncommutative.
-
Is there an existing typeclass for differences?
That's pretty much exactly the abstraction used in the 'linear' package's Affine class, in which we find points separated by vectors.
-
What are the current challenges in Numerical Programming for Haskell?
Linear algebra: hmatrix again with its own array type (and linear but this is restricted to low dimensions)
-
Advanced programming exercises/apps recommendations to code
This is very niche, but something I've wanted to do for a while is to generate some cool physics example on the surface of a sphere with https://hackage.haskell.org/package/hamilton, and display it with https://reanimate.github.io/ (using https://hackage.haskell.org/package/linear for the projection)
-
How to create my Functor / Eq / Num combination on Coords?
Do check out the linear package. It has some complicated parts, but the types work out very nicely. Your Coords type is called V3 in that package, it has a huge list of instances for all kinds of different type classes.
- Advent of Code 2021 day 06
-
Probabilistic modelling in Idris: engineering as research
I've come to love the linear approach, where instead of working with Naperian (Representable) functors, you work with Distributive functors.
-
Monthly Hask Anything (June 2021)
See also the linear library, it contains types like data V3 a = V3 a a a with all of the useful instances.
What are some alternatives?
When comparing three-layer and linear you can also consider the following projects:
cake-slayer - 🍰🔪 Architecture of Haskell backend applications
nimber - Finite nimber arithmetic
servant-py - Servant client generators for the Python language
nuha
chip8-book - An introduction to Chip-8 emulation using Rust
moving-averages
urbit-api - talk to your urbit from haskell
effect-zoo - Comparing Haskell effect systems for ergonomics and speed
servant-swagger-tags - Swagger Tags for Servant
reservoir - Reservoir Sampling Algorithms in Haskell
servant-benchmark - Generate benchmark files from Servant APIs
linear-accelerate - Instances to mix linear with accelerate