HomeVideos

Haskell is DONE

Now Playing

Haskell is DONE

Transcript

476 segments

0:00

Haskell is dead.

0:03

I'm saying that because look at this

0:05

right here. After 7 years in production,

0:08

Scarf has reluctantly moved away from

0:11

Haskell. Now, for those that don't know,

0:12

Scarf is one of the large Haskell

0:15

companies out there running Haskell in

0:17

production. I know a lot of you right

0:19

now thought, "Well, the white the white

0:20

paper language?" Yes, the white paper

0:22

language actually does have a few

0:24

production cases and this is one of

0:26

them. Now, normally when I make this

0:27

joke, I inevitably there's somebody in

0:29

the comments losing their mind.

0:31

"Actually, YOU JUST DON'T EVEN

0:32

UNDERSTAND. YOU'RE SUCH a stupid idiot.

0:34

The type system is Okay, okay. Hey, the

0:37

white paper it's just a joke, okay,

0:38

buddy? Okay, guy. Hey, you're not that

0:40

guy, pal. Just back up Just back off the

0:42

keyboard, okay?" Now, normally I

0:43

wouldn't necessarily be that excited

0:45

about these type of articles, but the

0:46

reason why I am excited about this is

0:48

that this Avi Press fella right here,

0:50

not only did he start a company with

0:52

Haskell, the company is successful using

0:55

Haskell, and he serves on the Haskell

0:58

Foundation and haskell.org committee.

1:01

He's been using it for the last 16

1:03

years. He's claimed he's a huge fan of

1:04

it and it's the undeniably most

1:06

important programming language in his

1:08

life. Like, he loves Haskell. And when I

1:11

see somebody who really loves something

1:12

decides that they want to move away from

1:14

it, I have to know why. Because me

1:17

personally, I I recently made a video

1:18

where I said I'm done with Go and it's I

1:21

I was a huge fan of it. I loved using Go

1:24

and then I kind of felt like the North

1:26

Star of Go just no longer mapped up with

1:28

the North Star of what I wanted out of

1:30

the language. And so, I'm always

1:32

curious. Whenever I see somebody who's

1:33

done something for a long time, why do

1:36

you change? What is the thought process?

1:38

Because I want to learn from you. Now,

1:41

in this video I'm going to be doing

1:42

something that I Again, I typically try

1:44

not to do, but we're going to be making

1:45

yet another tech prediction due to the

1:47

last two tech predictions being so

1:50

just spot on, I think I got a good third

1:53

one and it maps up with this article,

1:55

okay? So, we're going to go over this

1:57

article, the reasons why he's changing.

1:59

Honestly, there was a section caught me

2:01

completely off guard, and then there was

2:02

a follow-up section that caught me even

2:04

further off guard. I just couldn't even

2:06

believe it. I just I was even I I felt

2:08

like my eyes were just like just must be

2:10

misreading it. But, before we get to

2:12

this monoid in the category of

2:14

endofunctors, I'd like to first say

2:16

thank you to the sponsor. Oh, monad,

2:18

that's just a monoid in the category of

2:19

endofunctors. Hey, is that HTTP? Get

2:22

that out of here. That's not how we

2:24

order coffee. We order coffee via SSH,

2:27

terminal.shop. Yeah, you want a real

2:28

experience? You want real coffee? You

2:31

want awesome subscription so you never

2:32

have to remember again? Oh, you want

2:34

exclusive blends with exclusive coffee

2:37

and exclusive content? [music]

2:39

Then check out Crown. You don't know

2:41

what SSH is?

2:42

>> Errors on

2:43

>> Well, maybe the coffee's not for you.

2:45

>> Terminal coffee

2:48

in hand,

2:50

living the

2:51

dream.

2:54

>> All right, welcome back, my little

2:55

digital monads. So, now, to kind of talk

2:57

about this article, first, Obvi gives

3:00

kind of like a what they have done with

3:02

Haskell. They have done a whole bunch.

3:03

They built a bunch of production

3:05

systems. They have a bunch of

3:06

high-performance Haskell, which I didn't

3:07

even really realize was possible. But,

3:10

what they what it comes down to is he's

3:11

saying is that a huge problem is

3:13

compilation and ecosystem friction. That

3:17

they just spend so much time trying to

3:20

optimize, build. They're effectively

3:21

doing so much time as a company what

3:24

probably should be handled at a language

3:26

level. Like, the language should be the

3:28

one providing all these available, you

3:30

know, tools. But, instead, every company

3:32

that ends up using Haskell has to come

3:34

up with their own bespoke or unique

3:36

caching system. They have to come up

3:38

with their own ways to be able to have

3:39

really solid developer environments, CI,

3:41

and everything. And this is a like a

3:43

major burden on the company. For a long

3:46

time, that was workable. Our team knows

3:49

the language and tooling deeply. We knew

3:51

where the sharp edges were and we mostly

3:53

lived with it. Then AI changed the

3:56

trade-offs. Yes, I This is one of the

3:58

kind of the the first of many surprises

4:00

for me. I I was a bit surprised why AI

4:03

made these changes because I would

4:05

assume that AI would have actually

4:07

performed quite well with with Haskell.

4:10

And the reason being is that Haskell has

4:12

a very deep and provably correct type

4:15

system and which gives really excellent

4:16

feedback about the things that are going

4:18

wrong. So, I would assume that a thing

4:20

like AI would have just gone hard on the

4:23

Haskell system, right? Like it's

4:25

actually just a Haskell fanboy

4:26

underneath. That that the matrices and

4:29

Haskells, they're like little you know,

4:30

they're bedfellows at this point. But

4:32

apparently,

4:33

I was wrong. And his argument goes a

4:35

little something like this.

4:36

Historically, I thought about errors as

4:38

something you caught in either one of

4:40

two places, at compile time or at run

4:42

time. Now, there's a third place, code

4:44

generation time. The model can often

4:46

avoid a mistake before the compiler even

4:48

sees the code. And as the models get

4:50

better, the relative value of catching

4:52

every possible issue at compile time

4:54

changes. Very surprising, by the way,

4:56

for a Haskell person to say this. This

4:57

is like This is the most nuanced ass

5:00

take I've ever seen a Haskell person

5:02

have. Because typically, it's like, "Oh,

5:03

no, no, actually the answer's Haskell."

5:05

Oh, what are you I don't even need to

5:06

hear what project you're building. The

5:07

answer's Haskell. Haskell's like the

5:09

greatest, okay? Here, let's get started

5:11

on the white paper together. Next year,

5:12

we'll get started on the project, okay?

5:14

Me and you, babe. Now, this is really

5:15

where the first big like, "Oh my gosh."

5:18

comes in. This is not to say that type

5:20

safety has become worthless, but the

5:22

cost of type checking matters more now.

5:25

So, the compilation times matter a whole

5:27

bunch, but this is a Haskell person

5:29

telling you that types aren't worth the

5:31

same. If type checking takes too long,

5:34

it's no longer worth it as much. Very

5:37

very shocking. And his argument goes,

5:39

"If an LM can produce a working

5:41

implementation in a few minutes, but

5:42

your compiler steps takes dramatically

5:44

longer, then your language and build

5:46

system has become the bottleneck in

5:47

development loop. And that is because

5:49

with his project, the size of the scope

5:51

of the project, a cold build can take 15

5:54

minutes. That means if you spin off a

5:56

new agent in a new work tree, the

5:58

initial setup time includes a minimum

6:00

15-minute cold start build. Now, that I

6:03

can understand. Like, that's a lot.

6:05

That's a lot of CPU time, especially if

6:07

you have a bunch of people kicking off a

6:09

bunch of builds. You're spending a lot

6:11

of machine time just even getting to the

6:13

point of starting to make a query or an

6:16

LLM anything. And he makes an even

6:18

stronger point with this becomes

6:19

unbearable when you start using many

6:21

coding agents in parallel. This becomes

6:22

obvious if you haven't thought about it.

6:24

The longer and stronger your build times

6:26

are, the more computation or CPU time

6:29

that you need to have. So, if you have

6:31

multiple of these things running at the

6:33

same time, the build time goes from 15

6:35

minutes potentially to 30-40 minutes

6:37

because you have many things all

6:39

competing for the CPU at the same time.

6:41

So, this could actually become like a

6:42

major bottleneck. You couldn't do

6:44

anything with it. And if the model

6:46

you're using, say, Grok-4 5 super-duper

6:48

fast only takes 2 minutes to generate a

6:50

piece of code, and then it takes like 30

6:52

minutes to set up your environment, I

6:54

agree. That's actually kind of crazy. A

6:56

part that really floored me here is that

6:57

sometimes the loop is 20 seconds, and

6:59

that feels great. I can't even imagine,

7:02

personally, wanting to wait 20 seconds

7:04

to see if what I have programmed is

7:06

correct or not. Now, the program that

7:08

I've been writing for the last about

7:09

month and a half, it's almost up to

7:11

about 20,000 lines of code. So, it's not

7:13

a very big project, but if I go in here

7:15

and change an enum to just be a word

7:17

that doesn't make any sense in this

7:18

category, we clearly have an error right

7:21

here. If I go and do a full build,

7:23

you're going to see the result in

7:24

approximately what, 100 milliseconds? If

7:26

I keep on executing it over and over

7:28

again, it's just super, super fast.

7:30

Somewhere between 70 to 100

7:31

milliseconds. Now, these old eyes and

7:33

these old nervous system, I can't even

7:35

possibly respond to that level of speed.

7:38

And so, this type of turnaround is what

7:41

I am used to. I want to see this. This

7:43

is what I want out because I don't want

7:46

something as simple as compilation being

7:48

the bottleneck cuz that is kind of

7:50

crazy. So, I really think I understand

7:52

his general argument, which is just a

7:54

very practical side. It's not the

7:56

language. It's It's none of that. He

7:59

does make some basic arguments that the

8:01

people within Haskell, they really don't

8:03

want to actually make Haskell for AI

8:06

agents. None of them consider that

8:07

compile times to be a problem or they

8:09

actually feel like they want to go

8:11

anti-AI. Now, I'm not going to really go

8:13

into why I think that is good or bad. I

8:15

don't You know, it's just like I don't

8:17

really care. You want to You can run

8:18

your language however you want to run

8:19

your language. That is up to you. That's

8:21

hey, that's cool on you, bro. I don't

8:22

care. So, this is where the second big

8:24

kind of wow moment, the one that I was

8:26

completely taken back on. How we move.

8:29

Now,

8:30

there in the Haskell world, they are the

8:32

ultimate typed Andy. They love types.

8:35

They use types. They use types. They use

8:37

them to death. They just want them. They

8:38

love them. They sleep with them. They

8:40

read books about them. And now they're

8:42

going to change. They're going to change

8:43

their whole ecosystem. I think the very

8:46

natural kind of move here is like, "Oh,

8:48

okay. You think 20-second loop feels

8:50

great. Okay, Rust. This would be a

8:53

pretty natural move to Rust. You get all

8:55

the benefit of like a really specific

8:57

strong compiler language. You have a lot

8:59

of similarities with Haskell with a lot

9:01

of the deeper types within it. So, okay.

9:04

We're probably going to move over to

9:05

Rust is what you're thinking."

9:07

Wrong, son. At Scarf, we started doing

9:09

all of our new API work in Python.

9:12

Now, this is not something I saw coming.

9:15

A company that loved Haskell moved to

9:19

Python. Okay, hey, maybe I just

9:21

misunderstand the situation, but that

9:23

just seems like This is like an M. Night

9:25

Shyamalan turnaround right now. Like,

9:28

what is happening to my life? Okay, AI

9:31

is upending all cultural norms, and I

9:34

don't think I like it right now, okay?

9:36

Because my Haskellers are supposed to

9:38

look down on someone like me who uses a

9:40

language like Odin, okay? They're

9:42

supposed to look down on me because I

9:43

don't even have some types that is to

9:46

their elegant nature of some types.

9:48

Yeah, sure, I have unions and I have

9:50

some other nice fancies in this, but I

9:51

do not have the quality of catamorphism

9:55

or whatever they call it laying upon my

9:58

eyeballs like they have. Meanwhile, I'm

10:00

over here and I'm still trying to

10:02

explain monads like a burrito, WHICH IS

10:04

JUST NOT

10:06

THE HIGHBROW WAY OF DOING THINGS. BUT,

10:08

when I see a company transition from

10:10

Haskell to Python, it's crazy.

10:13

Bro, that's crazy to me. The thing I

10:15

like the most about all of this is this

10:17

paragraph right here. So, after kind of

10:19

explaining how they transitioned over to

10:21

Python, he says the following. The

10:23

result is hard to capture in a single

10:25

metric. PR throughput did not obviously

10:27

go up. Commit volume is noisy. Lines of

10:29

code is a bad proxy. Thank you.

10:32

>> [applause]

10:32

>> You can tell this guy's a real engineer

10:34

cuz he doesn't have just literally one

10:36

head takes.

10:37

I produce a lot of code like no one

10:39

cares if you produce a lot of code,

10:40

okay? That's stupid. It makes you look

10:42

stupid. You act stupid when you say

10:44

those things. So, shut the up with

10:45

the monads. Anyways, development count

10:47

is money because it includes previews,

10:49

infrastructure, and other noise. But,

10:51

the productivity change is visible in

10:53

the shape of what we can now ship with

10:55

high effort, minimal oversight, and even

10:57

what we can ship fully automatically.

10:59

From customer call, ticket filed, open

11:01

PR, PR reviewed, iterated, and merged,

11:04

and deployed, we can sometimes have

11:06

fixed live before I get off the call

11:08

with the customer. Resisting this kind

11:10

of productivity is not an option

11:12

anymore. And I think I I think we're

11:14

going to see a lot lot more of this. For

11:17

better or for worse, I think when it

11:18

comes to simple bug fixes, I think you

11:20

can largely just let AI kind of go

11:23

pretty autonomous as long as you have

11:24

enough kind of e-vows and review process

11:27

set up, it should pretty easily be all

11:29

automatic at this point, especially

11:31

small stuff. But, at the end of the day,

11:33

I think this is going to become just

11:34

like a giant uh focus for a lot of

11:37

people, which is a lot of the kind of

11:39

the noise of development can be shed off

11:42

pretty quickly when you start using

11:44

these you know, the old LLMs. Because

11:46

imagine if he was still on Haskell, he'd

11:48

be on a customer call. He's going to be

11:50

like, "Okay, we can start taking care of

11:51

that, but first we need to wait 30

11:53

minutes for this build to get kind of up

11:55

and running. Then after that build gets

11:57

up and running, it needs to go to CI,

11:58

then CI needs to prove it out. Okay,

11:59

that's going to be another huge long

12:01

build wait time. Then after that is

12:02

done, then you're going to need to do

12:04

build the deployment, the actual

12:05

artifact itself. Now, that's going to

12:07

take another long time. And then

12:08

finally, it gets off to production. Like

12:10

it could you can see why this takes a

12:12

long time. It's like that one little

12:14

change requires hours of computation

12:17

time. And at the end, he talks a lot

12:19

about how Haskell's in real danger. I

12:20

actually recommend you reading this. I

12:22

think it has a lot of really good

12:23

insight into what it's like kind of

12:26

trying to run a company, be a part of a

12:28

language. Like what do you do when you

12:30

really deeply care for something, but

12:31

you feel that ends are odds with the

12:33

people who are also running it? A lot of

12:35

cool kind of takeaways within this, and

12:37

I just strongly recommend a good reading

12:39

for you. But I really wanted to talk

12:40

about that kind of top part, the more

12:42

practical boots on the ground like

12:44

I would just not have guessed if you

12:46

would have asked me compilation times

12:47

being the big culprit here, that caching

12:49

was really difficult. I knew the

12:51

ecosystem was kind of hard to work with,

12:53

but I did not realize it was to this

12:54

extent that even the experts are like,

12:57

"Tag me out." Also, let's just the

12:59

Python part. The Python part was nuts.

13:01

But now it's time for the prediction

13:03

that I said I was going to do. Now,

13:05

typically when it comes to uh some

13:07

development, especially in the kind of

13:09

the LLM day and age, what you have is

13:12

you have cost. That's one of the sides

13:13

of the triangle, right? And then you

13:16

also have speed. How long does it take

13:18

for the LLM to kind of do something or

13:20

be a part of something or to give good

13:21

feedback on all that. And then lastly,

13:23

you're going to have correctness. Now,

13:25

it kind of seems like for the last few

13:26

years, correctness has been the large

13:29

focus of a lot of these providers. I'm

13:31

thinking about like Fable, right? Fable

13:33

takes a long time to do anything, but

13:35

when it when it gives out is generally

13:37

it can be pretty close to what I would

13:38

like to see in production. But, the

13:40

speed is just atrocious and the cost, I

13:43

mean,

13:43

dang, I'm going to have to like give

13:45

away my inheritance for all of this. I'm

13:47

going to have no shoes and no shirt

13:49

after I get done using Fable. But,

13:51

nonetheless, you can kind of see this uh

13:53

By the way, is this Am I seeing Am I

13:56

seeing what I think I'm seeing here,

13:57

boys? Boys, am I

13:58

SEEING

13:59

>> [laughter]

13:59

>> ANY- OKAY, DON'T get me distracted by

14:02

the beautiful drawing. Now, my previous

14:03

prediction was that cost is going to

14:05

become something that's really

14:07

important. That we're going to start

14:08

seeing people really want to see cost

14:10

kind of going down and I think you're

14:12

starting to see that more and more. The

14:13

new Grok model is both fast and it's

14:15

also super cheap. The new Soul model is

14:17

like literally like 20 times cheaper

14:20

than the old Fables while being, you

14:21

know, approximately the same amount of

14:24

correctness. You know, they're all

14:25

within kind of a stone's throw of each

14:27

other. But, I think the next big thing

14:29

we're going to see is that speed is

14:31

actually going to take a huge front

14:33

stage step because as people start

14:36

realizing the speed of iteration is

14:38

really the most important thing cuz if I

14:40

can go and ask like, "Yo, give me three

14:42

implementations of this. I just want to

14:43

look at it. Like, what are we What are

14:45

we dealing with here?" And I get to see

14:47

like three different implementations of

14:49

something. If that could come back to me

14:50

in 3 minutes, like that is a gigantic W.

14:54

Even if it cost say a dollar more to be

14:56

able to do that, you would choose the

14:59

speed every single day of the week. And

15:01

so, I think that speed's going to become

15:03

the big new focus. And so, that is my

15:07

big kind of, you know, prediction for

15:09

the rest of 2026 is that that's what

15:11

we're going to hear a lot of people

15:13

talking about. The new fast models.

15:16

Okay, these are the fastest ones.

15:17

Anywho, this was a really awesome

15:19

article. Highly recommend you get all

15:21

the details out of it. Go take a read

15:22

out of it. Absolutely awesome. The 7

15:25

years in production and Scarf has

15:26

finally moved away from Haskell. It kind

15:29

of marks a a unique time period we're

15:31

living in. Like for me, this is the big

15:33

kind of flag for we're living in a new

15:35

time period that it's important enough

15:38

that even Haskell [clears throat] Andys

15:40

are saying, "Hey,

15:42

I need to change." That's

15:44

not something I ever thought I would

15:47

personally see. The name

15:49

is the prime imagine.

Interactive Summary

The video discusses a recent article about Scarf, a company that, despite being heavily invested in Haskell for seven years, has decided to move away from it. The speaker explores the reasons behind this decision, highlighting the burden of compilation and ecosystem friction, as well as how the rise of AI and coding agents has shifted the value proposition of traditional development workflows. Ultimately, the video analyzes how speed and efficient iteration are becoming the new priorities in software development, leading to the speaker's prediction that speed will be the next major focus for AI models.

Suggested questions

3 ready-made prompts