News for hackers. Stuff that matters.
Re:Haskell IHP framework, from a technical and business pers... by leetrout on Thursday November 11, 2021 @08:39AM (#29187682)
I tried Haskell a decade ago and gave up pretty quick due to some of the stereotypical reasons.

I really like this test file the author linked to for a great example of what "real" haskell can look like.

https://github.com/Gizra/ihp-simple-seat-reservation/blob/ma...

I'm interested in other "pragmatic" haskell sources / tutorials that lose the ego / pretentiousness and demonstrate Getting Stuff Done™... any recommendations?

Re:Haskell IHP framework, from a technical and business pers... by agentultra on Thursday November 11, 2021 @10:31AM (#29188929)
I should probably write more but this is what I do on my stream at https://twitch.tv/agentultra -- we've built a streaming replication library for PostgreSQL (from scratch all the way up to released package) and are presently exploring different native GUI frameworks.

I tend to focus more on building things than the theory and hope that folks are seeing the practical side of programming in Haskell.

Re:Haskell IHP framework, from a technical and business pers... by _query on Thursday November 11, 2021 @09:12AM (#29187992)
Here's a link to the IHP Chat Example app: https://github.com/digitallyinduced/ihp-chat-example-app/blo...

You can find a couple real-world examples here https://ihp.digitallyinduced.com/Guide/examples.html

Re:Haskell IHP framework, from a technical and business pers... by __s on Thursday November 11, 2021 @08:10PM (#29195257)
Here's some of my repos, where I wouldn't say I'm a Haskell programmer, was more writing C/Python back when I wrote these:

Fractal renderer: https://github.com/serprex/Fractaler Templates.hs implements a variety of fractals as pure functions & Fractaler.hs is the UI

Brainfuck interpreter: https://github.com/serprex/bfhs minibf.hs is half the size of bf.hs, but the latter is more optimized as it implements jump tables for [] instructions & combines consecutive <>+- & more. Tape implemented as a zipper. Fun part of implementation is that the interpreter is mostly a pure function building up an output string & returns that to the io interpreter when it needs input or escaping

Re:Haskell IHP framework, from a technical and business pers... by gilmi on Thursday November 11, 2021 @10:25AM (#29188843)
I've recently released a (fairly complete by still alpha version) project-oriented Haskell ebook[0].

It targets programmers that are new to the language, and focuses on the practice of writing Haskell to build projects. Specifically, a blog generator.

[0]: https://lhbg-book.link

Re:Haskell IHP framework, from a technical and business pers... by rgoulter on Thursday November 11, 2021 @09:31AM (#29188172)
I like the term 'simple haskell' more. It links to a few blogposts with similar sentiments. http://simplehaskell.org/
Re:Haskell IHP framework, from a technical and business pers... by lalaithion on Thursday November 11, 2021 @11:45AM (#29190026)
The file linked is not what the 'simple Haskell' philosophy suggests. It is compiled with the following extensions enabled:

    OverloadedStrings
    NoImplicitPrelude
    ImplicitParams
    Rank2Types
    DisambiguateRecordFields
    NamedFieldPuns
    DuplicateRecordFields
    OverloadedLabels
    FlexibleContexts
    TypeSynonymInstances
    FlexibleInstances
    QuasiQuotes
    TypeFamilies
    PackageImports
    ScopedTypeVariables
    RecordWildCards
    TypeApplications
    DataKinds
    InstanceSigs
    DeriveGeneric
    MultiParamTypeClasses
    TypeOperators
    DeriveDataTypeable
    MultiWayIf
    UndecidableInstances
    BlockArguments
    PartialTypeSignatures
    LambdaCase
    DefaultSignatures
    EmptyDataDeriving
    BangPatterns
    BlockArguments
    MultiWayIf
    FunctionalDependencies
    PartialTypeSignatures
    StandaloneDeriving
    DerivingVia
Re:Haskell IHP framework, from a technical and business pers... by rgoulter on Thursday November 11, 2021 @12:16PM (#29190409)
Most of those feature in this list of recommended defaults https://github.com/commercialhaskell/rio#language-extensions which is cited as an example in simplehaskell's page on recommendations. https://www.simplehaskell.org/language-extensions.html

From what I've touched of Haskell, I'd think e.g. OverloadedStrings makes Haskell simpler to use than leaving it out. (And OverloadedStrings certianly doesn't seem ego-inducing).

Simple Haskell's page on extensions also isn't advocating for anything too concrete. Just an emphasis on pragmatic, simple to maintain code.

IHP's landing page even claims "Don't worry, you don't need to know much about Haskell to get started, you'll learn it along the way". This seems to be in the spirit of simple Haskell, although I'd be curious to hear about what parts seem not-simple.

Re:Haskell IHP framework, from a technical and business pers... by dwohnitmok on Thursday November 11, 2021 @01:26PM (#29191223)
The extensions that aren't on that list but are in the list provided by lalaithion are pretty "big" extensions that can severely increase the bar needed to understand Haskell code (I'm looking at ImplicitParams, QuasiQuotes, DataKinds, TypeOperators, and UndeciableInstances).

In general, I've only read over IHP code, but never used it myself, I'd be worried about the quality of GHC error messages for a Haskell novice with the amount of magic IHP is providing.

There's some nifty type-level programming going on in the background with IHP which works great when everything compiles, but can have confusing GHC error messages if you have an error.

Re:Haskell IHP framework, from a technical and business pers... by res0nat0r on Thursday November 11, 2021 @03:07PM (#29192510)
I bought the PDF, and now physical book of this, it's massive and really good: https://haskellbook.com/
Re:Haskell IHP framework, from a technical and business pers... by phaer on Thursday November 11, 2021 @08:37AM (#29187668)
I am confused, the text says:

> The subject of the mail will change based on the status of the Reservation. With the type system in place, the compiler makes sure we that do not forget any possible case.

But the [linked code](https://github.com/Gizra/ihp-simple-seat-reservation/blob/f9...) seems to include a wildcard clause which would just set the subject to an empty string. Am I missing something?

Re:Haskell IHP framework, from a technical and business pers... by HowardStark on Thursday November 11, 2021 @08:56AM (#29187844)
The important point isn’t that there’s a wild card, it’s that there isn’t an undefined clause. You know with compiler-assured certainty that WYSIWYG, which is a big step in code predictability.
Re:Haskell IHP framework, from a technical and business pers... by phaer on Thursday November 11, 2021 @09:00AM (#29187884)
Could you elaborate? Wouldn't it be better to i.e. throw a runtime error than to send an email with an empty subject to a user from a business perspective in most cases?
Re:Haskell IHP framework, from a technical and business pers... by amitaibu on Thursday November 11, 2021 @09:48AM (#29188367)
I tried to keep the code simple, so yeah - it was on the expense of making it more "right".

In this case I wouldn't call the command send the mail unless status was explicitly Accepted or Rejected.

But as notes above, the important part is that the compiler doesn't let me forget about all the possible cases (e.g. `Queue` in this example).

Re:Haskell IHP framework, from a technical and business pers... by dustingetz on Thursday November 11, 2021 @08:39AM (#29187688)
The web framework landing page: https://ihp.digitallyinduced.com/
Re:Haskell IHP framework, from a technical and business pers... by tromp on Thursday November 11, 2021 @08:54AM (#29187824)
Is it possible to use IHP without installing Nix? I already have brew as general package manager and ghcup/cabal as Haskell toolchain/library manager and dread having yet another package manager that might interfere...
Re:Haskell IHP framework, from a technical and business pers... by _query on Thursday November 11, 2021 @09:03AM (#29187904)
It's not possible to use IHP without Nix. Using nix allows us to make fully reproducable dev environments as all versions (even e.g. the version of postgres used in dev mode) are pinned down.

The IHP docs assume no knowledge about nix, so it should still mostly be very simple to get started.

We compiled a couple more reasons why IHP uses nix in this blog post: https://ihp.digitallyinduced.com/blog/2020-07-22-why-ihp-is-...

Btw: To give IHP a try without installing Nix you can also try out the official GitPod image here https://gitpod.io/#https://github.com/gitpod-io/template-ihp :)

Re:Haskell IHP framework, from a technical and business pers... by rgoulter on Thursday November 11, 2021 @10:22AM (#29188779)
Although I see nix is required, it would be possible to run the ihp-new program with just nix installed, but without needing to change your PATH permanently. e.g. with a shell.nix file with contents:

  { pkgs ? import <nixpkgs> {} }:

  let
    ihp-new = pkgs.fetchzip {
      url = "https://downloads.digitallyinduced.com/ihp-new.tar.gz";
      sha256 = "0prpw46iyrjwzglq38n4kfn68dv2piw6dn8464ra99yl1dml465m";
    };
  in
  pkgs.mkShell {
    packages = [pkgs.cachix ihp-new];
  }
Running nix-shell with this would download the ihp-new program, and you'd have access to it (and postgres, etc., when you run with a shell with direnv enabled), but outside of the nix-shell, your PATH and other things would be unaffected.
Re:Haskell IHP framework, from a technical and business pers... by _query on Thursday November 11, 2021 @10:27AM (#29188866)
The ihp-new command is only a shell script that does a few checks and then git clones the project boilerplate:

https://github.com/digitallyinduced/ihp/blob/master/ProjectG...

The actual IHP project has it's own nix-shell environment, so that all project dependencies are managed locally (https://github.com/digitallyinduced/ihp-boilerplate/blob/mas...).

Re:Haskell IHP framework, from a technical and business pers... by cosmic_quanta on Thursday November 11, 2021 @09:30AM (#29188162)
I learned a lot about building Haskell web apps by studying the following source code:

https://github.com/restyled-io/restyled.io

Re:Haskell IHP framework, from a technical and business pers... by yumraj on Thursday November 11, 2021 @02:10PM (#29191814)
There may not be an easy answer, but could someone opine on how a Haskell/IHP based web application would compare with Elixir/Phoenix based solution.

I'm primarily interested in Haskell vs Erlang/Elixir comparison rather than IHP vs Phoenix, since I'm aware that Phoenix may be more featured at the moment.

Re:Haskell IHP framework, from a technical and business pers... by tmm84 on Thursday November 11, 2021 @09:03PM (#29195557)
Here's a video on Haskell vs Elixir: https://www.youtube.com/watch?v=alXhK5ZI9SE&pp=ugMICgJqYRABG...

For me personally when I look at Elixir/OTP vs Haskell it breaks down to this; concurrency/parallelism/scaling, laziness (Haskell), syntax (H minimal vs E Ruby-esque) and types (H static, E dynamic). These are what I personally notice between them and I could be wrong with my interpretation because I don't work with Haskell/Elixir but merely watch/read content on them.

Re:Haskell IHP framework, from a technical and business pers... by lngnmn2 on Thursday November 11, 2021 @11:07AM (#29189476)
It is useless to say, but Haskell is a modeling and domain language, it is a sunset of math and highly sugared logic.

The proper place if Haskell code is Fastcgi and batch processing.

It should FFI everything infrastructure related and should be called by nginx or whatever.

Using it as a Java EE with monads is plain, well, let's say "over-engineering".

Re:Haskell IHP framework, from a technical and business pers... by chowells on Thursday November 11, 2021 @12:38PM (#29190679)
You have never used Haskell, have you?
Re:Haskell IHP framework, from a technical and business pers... by icrbow on Friday November 12, 2021 @03:11AM (#29197264)
Why bother with nginx or whatever if its native server is http3-capable and performant enough by itself?
Re:Haskell IHP framework, from a technical and business pers... by lngnmn2 on Friday November 12, 2021 @08:35PM (#29206512)
Because I don't see the point of having everything implemented in the same language, in sort of monolith with lots of complex dependencies.

For me, it is the same as to have a server in Mathlab.

Also, like I said, the code I am unreadable J2EE like mess of useless, redundant abstractions.

Re:Haskell IHP framework, from a technical and business pers... by thewakalix on Thursday November 11, 2021 @01:40PM (#29191389)
If it's useless to say, why did you say it?
Re:Haskell IHP framework, from a technical and business pers... by lngnmn2 on Friday November 12, 2021 @08:27PM (#29206479)
You see where this comment ended up? That is why.