Hacker News new | ask | show | jobs
by _query 1366 days ago
IHP is basically the rails/laravel/django of Haskell. If you haven't tried Haskell before or think Haskell is only about monads and math, give it a try and be surprised :)

Some links if you want to try out IHP:

- Intro video demoing how to build apps with IHP: https://www.youtube.com/watch?v=UbDtS_mUMpI

- Docs to get started: https://ihp.digitallyinduced.com/Guide/index.html

- IHP reviews: https://www.g2.com/products/ihp/reviews

Happy to answer any questions on IHP :)

2 comments

One of the great things about Django/Rails (and I guess Laravel, but I have no experience) is the ecosystem of packages that integrate well with them.

For example, with Django, there are a ton of packages that integrate well with things like Models, the Forms subsystem, Middleware, Template rendering, Cache backends, etc.

Is there a similar ecosystem with IHP? Are the extension points there in the framework to allow those sorts of packages to integrate seamlessly?

My past experience with Haskell web frameworks was that there weren't many packages for common things, and that when there were they took quite a bit of integration work to use nicely.

We don't have a comparable ecosystem yet, but IHP uses many popular Haskell libraries under the hood. So many normal Haskell libraries integrate very well, as the underlying data structures are always exposed. Functional programs compose well in general due to it's stateless nature, that helps as well.

IHP also comes with a lot of things you'd typically use external packages for (e.g. Auth).

In general the IHP experience is very different from other Haskell web frameworks and much more batteries included, so a lot of apps typically don't need any external packages at all.

> My past experience with Haskell web frameworks was that there weren't many packages for common things, and that when there were they took quite a bit of integration work to use nicely.

Congralulations, you read an email address out of a database! Commiserations, it was parsed into a LazyByteString and the rest of your stack demands a Text or a String or a CuneiformCodepointArray or whatever...

IHP actually provides a `cs` (cs as an abbrev for convertString) function that is always in scope. With that function you can easily convert between all different string types.
Nice one. This sort of usability thing sounds simple enough, but having it is really nice, especially for newcomers.
Isn't Yesod also like the Rails of Haskell?
Here's a quote from someone in the Haskell community that says it well https://twitter.com/mattoflambda/status/1275469470559907840

> You thought Yesod was Rails? Nope. Yesod is a highly modular library for developing web applications with a few opinions and some scaffolds.

> IHP is Rails - all the components are glued together in a way that makes modularity difficult.