Skip to content
0:00 / 0:00

#effectsystems#ghc#eff

Alexis King - “Effects for Less” @ ZuriHac 2020

Zürich Friends of Haskell

2K subscribers • 17 videos on Hallway

YouTube
  • Recommended by 6 people: 2 on Hacker News, 1 on Lobsters and 3 in engineering communities.
  • Presented by Alexis King

Advanced. Deep dive for people who know the field.

24K views6 years ago6 recommendations

Programming languagesSystems programmingHaskellFunctional programmingPerformance and optimization

Alexis King explains how to implement efficient algebraic effect systems in Haskell and reduce their performance overhead.

The uploader added no description.

Why it's here

6 people recommend this

What people say. Recommended as an excellent explanation of Haskell effect systems and how to optimize their performance.

Moments people linked to

u/n00bombin r/haskell • Recommends

Zürich Friends of Haskell Effects for Less - Alexis King

u/bjzabaPikelet, Fathomin r/ProgrammingLanguages • Recommends

Alexis King - “Effects for Less” @ ZuriHac 2020

gilmion Hacker News • Recommends

On “Ask HN: Best Talks of 2020?”

I don't know, I haven't watched most of them! But the best one I did watch this year was Alexis King's 'Effects for Less' (Haskell). link to this video

u/MaoStevemaoin r/functionalprogramming • Recommends

Zürich Friends of Haskell Effects for Less - Alexis King

one-punchon Hacker News • Recommends

On “Names are not type safety”

For those who may not be familiar with the Haskell ecosystem, Alexis King (lexi-lambda) writes many blogs and libraries related to Haskell. For example, you may be interested in her recent talk on effect systems in Haskell at ZuriHac 2020,1 based on the eff library she mainly contributes to.2 1: link to this video 2: link > he's asking you to read the article more carefully she

u/tomejaguarin r/haskell • Mentions

On “So what's the "standard" way people are doing effect handling these days?”

There are a couple of dimensions to compare effect systems on 1. How you mix effects, and whether you can remove them 2. What the underlying implementation is, and how to do higher-order effects Regarding mixing and removing, MTL uses, well, MTL-style. That means your effectful operations look like `MonadEffect m => ... -> m r` (e.g. `MonadEffect ~ MonadState Int`). You can remove effects by handling them in a concrete `Effect` monad transformer (e.g. `State Int`). This recipe requires N^2 instances. You need to give `MonadEffect` instances to all your *other* `OtherEffect` transformers that look like `MonadEffect m => MonadEffect (OtherEffect m)`. That's pretty annoying! `ReaderT IO` jus…

u/LPTKin r/ProgrammingLanguages • Mentions

On “What Is The Minimal Set Of Optimizations Needed For Zero-Cost Abstraction?”

…ing and abstracting, the compiler immediately loses much of its super powers. You can't just inline everything in realistic, practical applications, and unlike Rust, Haskell does not have guaranteed monomorphization — it tries to do some, but not always, and can't do it as pervasively. For example, see the following video at the given time stamp: link to this video This is also why Haskell libraries meant to be fast have to specify tons of inlining directives to the GHC compiler, sometimes having to mention in which _internal GHC inlining phase_ they should happen, for the rewrite rules to (hopefully) trigger appropriately. GHC is an amazing optimizing compiler, but it's pretty much the opposite of…
34View on Reddit

u/JSpadernain r/haskell • Mentions

On “Is the experimental Hackett language still under development?”

If I remember correctly she answered that question negatively at the end of her talk at ZuriHac: link to this video (a great talk btw)

u/ianliu88in r/haskell • Mentions

Doubt about GADTs and a video from Alexis King In the following slide from Alexis King talk ([video she presents this code snippet: data Eff f a where Return :: a -> Eff a Then :: f a -> (a -> Eff b) -> Eff b First, I think she made a typo here, because she forgot to put the `f` type variable in the constructor types, right? Second, how come the `Then` constructor can return `Eff f b`? I mean, I would guess that `Then` is a value holding two other values: a `f a` and a function `a -> Eff f b`, and somehow this value is of type `Eff f b`, but then wouldn't the `a` type variable be "unbound"? What happens if you pattern match a value of type `Eff f b`? Could it be a…
9View on Reddit

u/ElvishJerriccoin r/haskell • Mentions

On “Is there ever a reason to not mark a monadic bind operator (>>=) as inline?”

Yea Alexis King's talk from ZuriHac 2020 "Effects for less" does a great job of explaining the value and difficulty of inlining `(>>=)`

u/DoomFrog666in r/ProgrammingLanguages • Mentions

On “Where's more discussion of the designs of effect systems?”

In this talk she is describing the current landscape link to this video

u/InformalInflationin r/haskell • Mentions

On “Polysemy: Mea Culpa :: Reasonably Polymorphic”

I believe that's the talk u/erewok is talking about [video

u/isovectorin r/haskell • Mentions

On “Records of Functions vs Typeclasses for Mocks”

It's non-idiomatic but not going to kill you. Someone is sure to mention that typeclasses inline better which might have some low % impact on your performance, though it's unclear how true that is. Personally, I think trying to mock things at this level is systematic of trying to test the wrong things --- it suggests that too much of your application is running inside of the monad. Rather than trying to mock database calls to a user, move the core business logic into pure functions, and have a small shim layer that interacts with the database. Matt Parsons has an excellent blog post on how to go about doing this.

u/abstractcontrolSpiralin r/ProgrammingLanguages • Mentions

On “Do you care about theory?”

Apart from tooling, I think that Haskell's purity actually breeds poor programming habits because it forces monadic code for things that would have otherwise been much simpler in impure languages. Haskell's problems just start here since it requires huge stylistic changes in its users and does not effort a corresponding reward in return. The strange syntax is just the tip of the iceberg. Haskell actually requires one to throw away good habits in order to be useful. Also, I can't escape the feeling that had Haskell not been lazy, its tooling would have not had so many space leaks back when I was seriously giving it a try in 2016. I also had to deal with space leaks in my own Haskell programs…

u/Noughtmarein r/haskell • Mentions

On “Exploring ideas in Haskell”

Thanks for the elaborate answer and thanks for your work on Reflex. I tried to keep my original comment short, but I have more questions and thoughts. Firstly, continuous time is not only useful for clocks. Watching the talk "The Essence and Origins of Functional Reactive Programming" by Conal Elliott I get the impression that continuous time is really the cornerstone of FRP. For example an important feature is that you can choose a sampling rate after defining your behaviors without having to change the implementation of the behaviors (i.e. temporal resolution independence). It seems to me that you lose that if you don't have continuous time FRP. Or maybe it is really not that importa…