HNNewShowAskJobs
Built with Tanstack Start
Freer Monads, More Extensible Effects (2015) [pdf](okmij.org)
67 points by todsacerdoti 8 hours ago | 12 comments
  • nbaksalyar5 hours ago

    I strongly recommend to check all other papers and articles on https://okmij.org/ftp/, every single one of them is brilliant and insightful. I love the pedagogy, the writing style and clarity. Oleg Kiselyov is one of the best technical writers I've discovered recently.

  • kccqzy3 hours ago

    If you are looking for real-world code for an effect system, not just a PDF paper, you should probably look at the eff library: https://github.com/hasura/eff

    The acknowledgement section on that GitHub README mentions this paper.

    • Twey8 minutes ago |parent

      As far as I know the shiniest implementations in the effect typing world at the moment are Koka and Effekt, which are both languages in their own right. They each have their own ideas about implementation to make effects (mostly) zero-cost.

      https://koka-lang.github.io/ https://effekt-lang.org/

      Frank is pretty old now but perhaps a simpler implementation: https://github.com/frank-lang/frank

    • solomonb32 minutes ago |parent

      `eff` is a research project that is no longer in active development and never made it to production in any sense. It would be AMAZING if `eff` were completed but I dont think that will happen at this point.

      `eff` is based on delimited continuations (which Alexis had to build into GHC), it is not using `Freer`. If you want to look at an effect system in Haskell that actually has been used in production AND is based on this paper then look at `freer-simple`: https://hackage.haskell.org/package/freer-simple

      No it is not high performance, but neither are any other Haskell effect systems and performance is relative to your problem domain. It also has the benefit of being implemented very similarly to Oleg's paper making it a lot easier to learn from then most other options.

      • tome17 minutes ago |parent

        > No it is not high performance, but neither are any other Haskell effect systems

        This is not true. IO-wrapper effect systems (in practice, effectful or Bluefin) have as good performance as Haskell's IO monad, that is to say as good as you can get in Haskell.

    • tomean hour ago |parent

      eff has never been released to Hackage and as far as I know never used in production. I wouldn't call it "real-world code". For effect systems that people do actually use in production I suggest

      * Polysemy: https://hackage.haskell.org/package/polysemy

      * effectful: https://hackage.haskell.org/package/effectful

      * Bluefin: https://hackage-content.haskell.org/package/bluefin/docs/Blu...

      [Disclosure: Bluefin in my effect system]

    • epolanski3 hours ago |parent

      Also effect-ts in TypeScript world, which is by far the most popular effect system around (quite sure it has overtaken Scala's ZIO from which it is inspired).

      The ecosystem is massive.

      Cons: TypeScript is a great type system but requires some investment to get the best out of it, it's also very verbose.

      Pros: you have access to the entirety of the TypeScript ecosystem.

      https://effect.website/

      • Twey13 minutes ago |parent

        I've stumbled across this website a few times now and every time I'm surprised that despite the name it doesn't seem to include (or at least document) any kind of effect system. Am I just missing it? It seems to have some utilities for error-handling and that's about as close as it comes.

      • pxeger1an hour ago |parent

        > by far the most popular effect system around

        Crazy claim to make without providing any evidence

        • epolanski25 minutes ago |parent

          What other effect library or language has 6 millions + downloads per month (that's more than angular) and meetups popping all around the world?

  • wavemodean hour ago

    I've always loved this paper. Great reading if you're interested in implementing an effect system from scratch. Though rather overkill if you're just interested in using one.

  • sctb6 hours ago

    (2015) More information here: https://okmij.org/ftp/Haskell/extensible.