# How did we get from Haskell 98 to Haskell 2010?

**URL:** <https://discourse.haskell.org/t/how-did-we-get-from-haskell-98-to-haskell-2010/6501>\
**Category:** Uncategorized\
**Created:** [June 17, 2023, 4:02am UTC](https://discourse.haskell.org/t/how-did-we-get-from-haskell-98-to-haskell-2010/6501 "2023-06-17T04:02:12Z")\
**Posts on this page:** 17\
**Page:** 1

<div class="post-metadata">

**Author:** ![anon72232138](https://avatars.discourse-cdn.com/v4/letter/a/c37758/32.png) [@anon72232138](https://discourse.haskell.org/u/anon72232138)\
**Post date:** [June 17, 2023, 4:02am UTC](https://discourse.haskell.org/t/how-did-we-get-from-haskell-98-to-haskell-2010/6501/1 "2023-06-17T04:02:12Z")

</div>

Every few months, there’s conversation around when the next language standard is going to come out, and every few months there are replies about how we’re never getting a new one (GHC2021 is great, BTW).

That got me wondering how much work goes into writing a new language standard. Just looking at the Haskell 2010 Language Report, I see it’s 300+ pages!

Maybe all the decades humanity has spent writing new editions of popular books make such a task not so daunting, but as a complete novice, I fail to see how one even begins this journey.

I naively thought I could slowly start converting the standard to something like [mdBook](https://github.com/rust-lang/mdBook) or [sphinx](https://www.sphinx-doc.org/en/master/) and then slowly integrate differences implemented in GHC, but now I’m starting to realize how foolish that probably is. This then led me to the title of this post, in hopes that prior art would make even _dreaming_ of such a thing less terrifying.

---

<div class="post-metadata">

**Author:** ![atravers](https://avatars.discourse-cdn.com/v4/letter/a/45deac/32.png) [@atravers](https://discourse.haskell.org/u/atravers)\
**Post date:** [June 17, 2023, 8:21am UTC](https://discourse.haskell.org/t/how-did-we-get-from-haskell-98-to-haskell-2010/6501/2 "2023-06-17T08:21:57Z")

</div>

> [@anon72232138](#):
>
> **How did we get from Haskell 98 to Haskell 2010?**

A good question. I dimly recall a committee being part of the process (much like the one which brought Haskell into existence in 1987) - trying the search term:

```
"Haskell 2010" committee
```

…finds the [Haskell 2010 Report](https://www.haskell.org/definition/haskell2010.pdf) as a matching document:

> [@](#):
>
> (page 15 of 329)
> 
> In September of 1987 a meeting was held at the conference on Functional Programming Languages and  
> Computer Architecture (FPCA ’87) in Portland, Oregon, to discuss an unfortunate situation in the func-  
> tional programming community […] It was decided that a committee should be formed […]

That’s a reference to the inaugural committee; looking further:

> [@](#):
>
> (page 16)
> 
> At the 2005 Haskell Workshop, the consensus was that so many extensions to the ofﬁcial language were  
> widely used (and supported by multiple implementations), that it was worthwhile to deﬁne another iteration  
> of the language standard, essentially to codify (and legitimise) the status quo.
> 
> The Haskell Prime effort was thus conceived as a relatively conservative extension of Haskell 98, taking on  
> board new features only where they were well understood and widely agreed upon. It too was intended to be  
> a “stable” language, yet reﬂecting the considerable progress in research on language design in recent years.
> 
> After several years exploring the design space, it was decided that a single monolithic revision of the language  
> was too large a task, and the best way to make progress was to evolve the language in small incremental steps,  
> each revision integrating only a small number of well-understood extensions and changes. Haskell 2010 is  
> the first revision to be created in this way, and new revisions are expected once per year.

* * *

> [@anon72232138](#):
>
> Every few months, there’s conversation around when the next language standard is going to come out, and every few months there are replies about how we’re never getting a new one

That’s because there was an attempt made at defining a successor to Haskell 2010:

[https://github.com/haskell/rfcs/projects/1](https://github.com/haskell/rfcs/projects/1)

From what I can recall, it was an attempt at a new _“single monolithic revision of the language”_, and it really _“was too large a task”_ to undertake. That you now have `GHC 2021` is a direct consequence of that failure.

* * *

> [@anon72232138](#):
>
> This then led me to the title of this post, in hopes that prior art would make even _dreaming_ of such a thing less terrifying.

Unfortunately, I don’t know where the sources for the Haskell 2010 Report are - I’ve tried looking in the past for them (apparently with no success, otherwise I could be attempting to do something like what you’re contemplating right now).

* * *

> [@anon72232138](#):
>
> That got me wondering how much work goes into writing a new language standard. Just looking at the Haskell 2010 Language Report, I see it’s 300+ pages!

It’s actually in two parts: one for the language itself, and the other is for the libraries. Focus on the part which interests you the most. I _think_ these are the sources:

> **[report · master · Haskell / prime · GitLab](https://gitlab.haskell.org/haskell/prime/-/tree/master/report)**
>
> The Haskell Report and Haskell' standardization effort.

* * *

> [@anon72232138](#):
>
> I naively thought I could slowly start converting the standard to something like [mdBook](https://github.com/rust-lang/mdBook) or [sphinx](https://www.sphinx-doc.org/en/master/) and then slowly integrate differences implemented in GHC,

Therein lies the other problem: _which set of differences?_

Not all GHC extensions are compatible with each other, and adding new ones is now something of a sport…

---

<div class="post-metadata">

**Author:** ![AntC2](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/antc2/32/1872_2.png) [@AntC2](https://discourse.haskell.org/u/AntC2)\
**Post date:** [June 17, 2023, 8:30am UTC](https://discourse.haskell.org/t/how-did-we-get-from-haskell-98-to-haskell-2010/6501/3 "2023-06-17T08:30:39Z")

</div>

> [@anon72232138](#):
>
> how much work goes into writing a new language standard. Just looking at the Haskell 2010 Language Report, …

You’ll see the 2010 Report is very little different vs '98. (The differences are in blue in the pdf.)

A lot of folk were/are unhappy about that: a lot of effort went into discussions/there were a lot of extensions widely used since the '98 Standard.

BTW GHC 2021 is not a language Standard, but a default set of extensions chosen for one particular compiler.

I think Haskell has given up trying to have a formal Standard. GHC is a de facto Standard.

---

<div class="post-metadata">

**Author:** ![anon72232138](https://avatars.discourse-cdn.com/v4/letter/a/c37758/32.png) [@anon72232138](https://discourse.haskell.org/u/anon72232138)\
**Post date:** [June 17, 2023, 9:26am UTC](https://discourse.haskell.org/t/how-did-we-get-from-haskell-98-to-haskell-2010/6501/4 "2023-06-17T09:26:54Z")

</div>

> [@atravers](#):
>
> Therein lies the other problem: _which set of differences?_

My thought was to see what would happen if I folded what’s defined in the GHC2021 extension directly into the standard.

If what was different between Haskell98 and Haskell2010 truly wasn’t that large, maybe it wouldn’t be so hard.

The other thing I considered (in addition to or instead of the above) was to try and track down where GHC intentionally diverges from the standard and update those portions of the standard. I vaguely remember hearing that GHC and the standard differ with respect to how whitespace ought to be parsed, for instance.

I wonder how easy it is to treat prose like code with respect to commiting revisions? That is, does git baulk at the idea of merging separate commits, each of which adds text relating to a specific extension (which would presumably no longer be an extension)? Perhaps there are similar tools better tailored to technical writing that help minimize conflicts?

---

<div class="post-metadata">

**Author:** ![AntC2](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/antc2/32/1872_2.png) [@AntC2](https://discourse.haskell.org/u/AntC2)\
**Post date:** [June 17, 2023, 11:54am UTC](https://discourse.haskell.org/t/how-did-we-get-from-haskell-98-to-haskell-2010/6501/5 "2023-06-17T11:54:13Z")

</div>

> [@anon72232138](#):
>
> (which would presumably no longer be an extension)?

“Haskell is a language designed by committee” (or words to that effect) it says in the Report. You copy-pasting something into a text is not a committee process, does not define any Standard, doesn’t turn an extension into a non-extension.

GHC 2021 is merely a set of defaults. Not everybody uses it in all of their code. Some (like me) don’t use it at all/prefer to enable specific extensions only when needed/actively dislike some of the GHC 2021 extensions. This is why the GHC 2020 Committee ground to a halt.

OTOH many switch on a whole bunch of extensions beyond GHC 2021.

Who would be the target audience for such a copy-paste job?

---

<div class="post-metadata">

**Author:** ![jaror](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/jaror/32/3271_2.png) [@jaror](https://discourse.haskell.org/u/jaror)\
**Post date:** [June 17, 2023, 12:11pm UTC](https://discourse.haskell.org/t/how-did-we-get-from-haskell-98-to-haskell-2010/6501/6 "2023-06-17T12:11:11Z")

</div>

By the way, the “Haskell 2020 committee” was called the Haskell Prime (or Haskell’) 2020 committee. There are a bunch of remains scattered over the internet:

- [Haskell / prime · GitLab](https://gitlab.haskell.org/haskell/prime)
- [Language/HaskellPrime - HaskellWiki](https://wiki.haskell.org/Language/HaskellPrime)
- [The Haskell-prime Archives](https://mail.haskell.org/pipermail/haskell-prime/)

Especially the last thread in that mailing list might be of interest to you:

- [Humble message of support and concern from an interested newbie](https://mail.haskell.org/pipermail/haskell-prime/2021-November/004456.html)

---

<div class="post-metadata">

**Author:** ![anon72232138](https://avatars.discourse-cdn.com/v4/letter/a/c37758/32.png) [@anon72232138](https://discourse.haskell.org/u/anon72232138)\
**Post date:** [June 17, 2023, 12:54pm UTC](https://discourse.haskell.org/t/how-did-we-get-from-haskell-98-to-haskell-2010/6501/7 "2023-06-17T12:54:21Z")

</div>

Simply to remove barriers. If debate is preventing people from agreeing to write anything down, then perhaps having everything written down already reduces coming to consensus (about one aspect of the report anyway), to an exercise of deciding what to keep?

Deciding what to make for dinner and agreeing on who is responsible for cooking it is harder than deciding whether you want to eat what’s in front of you or not.

\<Never mind, it doesn’t matter\>

---

<div class="post-metadata">

**Author:** ![anon72232138](https://avatars.discourse-cdn.com/v4/letter/a/c37758/32.png) [@anon72232138](https://discourse.haskell.org/u/anon72232138)\
**Post date:** [June 17, 2023, 12:56pm UTC](https://discourse.haskell.org/t/how-did-we-get-from-haskell-98-to-haskell-2010/6501/8 "2023-06-17T12:56:16Z")

</div>

Thanks. I recall some of those conversations now that you’ve resurfaced those.

---

<div class="post-metadata">

**Author:** ![Bodigrim](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/bodigrim/32/1457_2.png) [@Bodigrim](https://discourse.haskell.org/u/Bodigrim)\
**Post date:** [June 17, 2023, 1:32pm UTC](https://discourse.haskell.org/t/how-did-we-get-from-haskell-98-to-haskell-2010/6501/9 "2023-06-17T13:32:16Z")

</div>

@AntC2 I find your language about “copy-paste job” unwelcoming and disrespectful to efforts of others.

---

<div class="post-metadata">

**Author:** ![atravers](https://avatars.discourse-cdn.com/v4/letter/a/45deac/32.png) [@atravers](https://discourse.haskell.org/u/atravers)\
**Post date:** [June 17, 2023, 9:59pm UTC](https://discourse.haskell.org/t/how-did-we-get-from-haskell-98-to-haskell-2010/6501/10 "2023-06-17T21:59:04Z")

</div>

Regarding those old sources for the Haskell 2010 Report: the search term used was `"Haskell 2010" latex sources`.

If you choose to work on your own private draft/prototype version, do try to work with the Tex documents directly - Tex for publishing book and papers is like HTML for publishing to the Web: _it’s ubiquitous_. If you look, there are probably Tex convertors for almost every other format, including _mdBook_ and _sphinx_.

---

<div class="post-metadata">

**Author:** ![AntC2](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/antc2/32/1872_2.png) [@AntC2](https://discourse.haskell.org/u/AntC2)\
**Post date:** [June 20, 2023, 10:43am UTC](https://discourse.haskell.org/t/how-did-we-get-from-haskell-98-to-haskell-2010/6501/11 "2023-06-20T10:43:18Z")

</div>

> [@jaror](#):
>
> Especially the last thread in that mailing list might be of interest to you:

Thanks good find! In particular Cale’s first reply to the ‘humble message’ says more eloquently and at greater detail what I was trying to say about the unhelpfulness of producing another document just drawing together existing text: what status does it have wrt the Haskell doco set? It’ll go out of date almost immediately. Who/how to maintain it?

> [@Bodigrim](#):
>
> disrespectful to efforts of others.

I think you’ve misunderstood me. I didn’t mention efforts of others plural. I was not talking about the Haskell Prime/2020 team, who made great efforts to in effect herd cats. (Or strewth is somebody going to take offence at that description? I apologize and withdraw) They weren’t merely focused on the text; they were trying to make decisions/draw a consensus.

O.P. seemed to be under the impression the Haskell community lacked resources or the will to produce a document merging the 2010 Language report with later ‘de facto’ GHC material, especially GHC2021 extensions specs.

The comment “no longer be an extension” had me baffled. I could only interpret it to mean O.P. intended the resulting doco to legislate GHC2021 into effect as a new Language report.

---

<div class="post-metadata">

**Author:** ![Bodigrim](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/bodigrim/32/1457_2.png) [@Bodigrim](https://discourse.haskell.org/u/Bodigrim)\
**Post date:** [June 21, 2023, 6:24pm UTC](https://discourse.haskell.org/t/how-did-we-get-from-haskell-98-to-haskell-2010/6501/12 "2023-06-21T18:24:31Z")

</div>

> [@AntC2](#):
>
> I think you’ve misunderstood me. I didn’t mention efforts of others plural. I was not talking about the Haskell Prime/2020 team, who made great efforts to in effect herd cats.

I understood you fairly well, and I meant specifically your treatment of the O. P.

> [@AntC2](#):
>
> O.P. seemed to be under the impression the Haskell community lacked resources or the will to produce a document merging the 2010 Language report with later ‘de facto’ GHC material, especially GHC2021 extensions specs.

Which is a correct impression.

> [@AntC2](#):
>
> The comment “no longer be an extension” had me baffled. I could only interpret it to mean O.P. intended the resulting doco to legislate GHC2021 into effect as a new Language report.

Which does not explain harshness and rudeness of your response to an offer of free labor on a community project.

---

<div class="post-metadata">

**Author:** ![Jappie](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/jappie/32/5394_2.png) [@Jappie](https://discourse.haskell.org/u/Jappie)\
**Post date:** [June 22, 2023, 12:18am UTC](https://discourse.haskell.org/t/how-did-we-get-from-haskell-98-to-haskell-2010/6501/14 "2023-06-22T00:18:15Z")

</div>

@Delete_me idk if u still arround, but for context, sandy made a [writeup](https://reasonablypolymorphic.com/blog/haskell202x/) on the status of haskell 2020, which at some point was an effort underway.

You’ve my support if you want to drive an effort of a new standard. I can’t lead this however. The task is to big for me to lead myself as I’ve other obligations, but I can help out here and there.

---

<div class="post-metadata">

**Author:** ![AntC2](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/antc2/32/1872_2.png) [@AntC2](https://discourse.haskell.org/u/AntC2)\
**Post date:** [June 22, 2023, 6:05am UTC](https://discourse.haskell.org/t/how-did-we-get-from-haskell-98-to-haskell-2010/6501/15 "2023-06-22T06:05:29Z")

</div>

Er folks, recent remarks here are getting rather ad hominem-y.

I hope we’ve all enough experience of complex software projects to know there’s no such thing as “free labor”. Especially not from someone who introduces themselves as “a complete novice”. (I took that to be wrt Haskell, not wrt software dev in general or doco tools.) It would be demotivating for them and probably not arrive at the desired result without continual liaison – from who?

Nor is there a shortage of folk who can write/edit text about Haskell. It’s going on all over: Stackoverflow, reddit, Discourse, blogs, mailing lists … I’ve even volunteered material to the User Guide myself. That was free from me but not for the dev. team. And didn’t get all the way through the release process until more than a year after I first sent it in.

Producing a new Standard is chiefly not about managing the text.

The several initial replies (including from me) to the O.P. tried to warn of this. On reading back, perhaps they were too subtle/assumed too much background knowledge. I do wish that thread “Humble message” had appeared earlier. Cale explains the challenges in detail. And the danger it’ll be wasted effort.

So when O.P. Replied with

> [@anon72232138](#):
>
> update those portions of the standard

What did yous think would happen with that updated text? Why did Haskell have a Prime/2020 Committee if it only needed a bit of updating to make something (what?) “presumably no longer be an extension”?

O.P.'s reply seemed to me not listening and not thinking through objectives. So I felt it needed saying more clearly: the exercise is not about managing text, not the mechanics of version control, not merely a lack of willing hands. I’m not sure more recent remarks from others are grokking this. So:

> [@anon72232138](#):
>
> If debate is preventing people from agreeing to write anything down, …

My direct language didn’t get the message across. I failed. Furthermore, my being against the suggested actions was taken as being against the suggester. Where in my words am I doing other than ‘playing the ball’?

---

<div class="post-metadata">

**Author:** ![hasufell](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/hasufell/32/1250_2.png) [@hasufell](https://discourse.haskell.org/u/hasufell)\
**Post date:** [June 22, 2023, 10:11am UTC](https://discourse.haskell.org/t/how-did-we-get-from-haskell-98-to-haskell-2010/6501/16 "2023-06-22T10:11:11Z")

</div>

A new standard might not be very useful, since it will be constantly out of sync with the GHC steering committee, wouldn’t it? Unless there will be an efficient process of amending/revising the standard and doing so that nothing gets into GHC mainline until it’s in the standard. That will also require more thought about how to ship experimental compilers or how to make GHC standard conform via flags.

Don’t see that happening, so the standard is nothing but a formal milestone, more carefully evaluated than GHCXXXX.

---

<div class="post-metadata">

**Author:** ![AntC2](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/antc2/32/1872_2.png) [@AntC2](https://discourse.haskell.org/u/AntC2)\
**Post date:** [June 22, 2023, 2:36pm UTC](https://discourse.haskell.org/t/how-did-we-get-from-haskell-98-to-haskell-2010/6501/17 "2023-06-22T14:36:55Z")

</div>

> [@hasufell](#):
>
> A new standard might not be very useful, since it will be constantly out of sync …

Indeed, as Cale pointed out. O.P. made an important observation:

> [@anon72232138](#):
>
> try and track down where GHC intentionally diverges from the standard and update those portions of the standard.

Going from GHC, the User Guide does get you to the applicable point in the standard. But reading the standard (like a novel? does anybody do that?) it’s hard work connecting to where in GHC docos.

Then (if anybody is still listening) a less bit-rottable resource might be a parallel commentary following the Report sequence: section p.q in the Report is amended [\*\*] by section x.y.z in the User Guide – including the GHC2021 cross-refs. With links only, and just enough words to give context – the bulk of the words stay at the links.

This should be nicely interactive and fit into the GHC wiki structure. But I emphasize first contact the owners/maintainers of the wiki for their counsel. (They were a lot less exacting than the User Guide edit control when I added some material.)

[\*\*] Less contentious phrasing there might ‘is implemented as’ or ‘is interpreted in context of GHC as’.

---

<div class="post-metadata">

**Author:** ![treblacy](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/treblacy/32/1782_2.png) [@treblacy](https://discourse.haskell.org/u/treblacy)\
**Post date:** [June 22, 2023, 5:52pm UTC](https://discourse.haskell.org/t/how-did-we-get-from-haskell-98-to-haskell-2010/6501/18 "2023-06-22T17:52:12Z")

</div>

Documenting a production language is indeed daunting. (Standardizing implies documenting.) ISO C11 is 600+ pages (including libraries again), for comparison.

In fact Haskell got away with being half the size becasue, only because, it handwaves away 90% of static semantics with “oh it’s just Hindley-Milner”, and 90% of dynamic semantics with “oh it’s just lambda calculus”. Notice that C spells out both painstakingly (not “oh just like Algol 60 with these changes”).

Then again my comparison can backfire because you can point at SML97 which needs only 130+ pages. (But it doesn’t include the standard library.)

I happen to be of the unusual and unpopular opinion that not documenting the baseline type system is what’s blocking meaningful standardization of any of GHC’s type-oriented extensions.

(I know of Mark Jone’s Typing Haskell in Haskell, but we need to add it to the Haskell Report for real, and probably in judgment form rather than in “Defining Haskell in Haskell” form LOL.)
