mirror of
https://github.com/sdiehl/write-you-a-haskell.git
synced 2024-09-11 19:47:31 +03:00
commit 41ba8c36a90cc11723b14ce6c45599eabdcfaa53 Author: Stephen Diehl <stephen.m.diehl@gmail.com> Date: Sun Jan 18 21:02:57 2015 -0500 type provenance commit be5eda941bb4c44b4c4af0ddbbd793643938f4ff Author: Stephen Diehl <stephen.m.diehl@gmail.com> Date: Sun Jan 18 20:13:06 2015 -0500 provenance prototype commit 7aa958b9c279e7571f7c4887f6aa19443e16f6fb Author: Stephen Diehl <stephen.m.diehl@gmail.com> Date: Sun Jan 18 19:35:08 2015 -0500 fix misc typos commit 52d60b3b2630e50ef0cd6ea5f0fa1f308d92e26d Author: Stephen Diehl <stephen.m.diehl@gmail.com> Date: Sun Jan 18 15:15:58 2015 -0500 license badge commit 7d34274afe6f05a0002c8f87e5077b6a130b42b4 Author: Stephen Diehl <stephen.m.diehl@gmail.com> Date: Sun Jan 18 15:07:28 2015 -0500 fix resolution for llvm cfg graphs commit 14d9bc836ecc64f8e9acc60bcbd2da02335255b9 Author: Stephen Diehl <stephen.m.diehl@gmail.com> Date: Sun Jan 18 13:12:39 2015 -0500 added codegen dsl stub commit 0f74cdd6f95d0a1fe1cafd73e45cb1407709efd8 Author: Stephen Diehl <stephen.m.diehl@gmail.com> Date: Sun Jan 18 13:01:14 2015 -0500 llvm cfg graphs commit a199d721503985954060e7670c1d2f5e1a65dd11 Author: Stephen Diehl <stephen.m.diehl@gmail.com> Date: Sun Jan 18 10:56:54 2015 -0500 source code font commit c7db0c5d67b73d8633f08be093971877e2d6ede0 Author: Stephen Diehl <stephen.m.diehl@gmail.com> Date: Sun Jan 18 09:59:37 2015 -0500 change phrasing around recursion commit 6903700db482524233262e722df54b1066218250 Author: Stephen Diehl <stephen.m.diehl@gmail.com> Date: Sat Jan 17 18:20:06 2015 -0500 contributors.md commit 14d90a3f2ebf7ddf1229c084fe4a1e9fa13f2e41 Author: Stephen Diehl <stephen.m.diehl@gmail.com> Date: Sat Jan 17 17:35:41 2015 -0500 added llvm logo commit d270df6d94cbf1ef9eddfdd64af5aabc36ebca72 Author: Stephen Diehl <stephen.m.diehl@gmail.com> Date: Sat Jan 17 15:50:28 2015 -0500 initial llvm chapter commit e71b189c057ea9e399e90e47d9d49bb4cf12cda8 Author: Stephen Diehl <stephen.m.diehl@gmail.com> Date: Sat Jan 17 12:21:00 2015 -0500 system-f typing rules commit 2a7d5c7f137cf352eeae64836df634c98118f594 Author: Stephen Diehl <stephen.m.diehl@gmail.com> Date: Thu Jan 15 15:21:14 2015 -0500 flesh out system-f commit 7b3b2f0a2aea5e1102abe093cf5e0559090720aa Author: Stephen Diehl <stephen.m.diehl@gmail.com> Date: Wed Jan 14 22:22:14 2015 -0500 started on extended parser commit cdeaf1a2658f15346fe1dc665ca09e954cce6c2e Author: Stephen Diehl <stephen.m.diehl@gmail.com> Date: Wed Jan 14 17:25:02 2015 -0500 creative commons license commit f09d210be253a05fc8ad0827cd72ffa32404e2ba Author: Stephen Diehl <stephen.m.diehl@gmail.com> Date: Wed Jan 14 16:54:10 2015 -0500 higher res images commit 8555eadfea8843f5683621e6652857e4259fa896 Author: Stephen Diehl <stephen.m.diehl@gmail.com> Date: Wed Jan 14 14:48:44 2015 -0500 cover page commit e5e542e92610f4bb4c5ac726ffa86cd1e07753e3 Author: Stephen Diehl <stephen.m.diehl@gmail.com> Date: Tue Jan 13 17:31:01 2015 -0500 initial happy/alex parser
48 lines
2.0 KiB
Markdown
48 lines
2.0 KiB
Markdown
% Write You a Haskell
|
|
% Stephen Diehl
|
|
% 1/2/2015
|
|
|
|
<!--
|
|
|
|
Forward
|
|
=======
|
|
|
|
In 2014 I wrote a [short tutorial](http://www.stephendiehl.com/llvm/) about
|
|
building a small imperative language in Haskell that compiled into LLVM. I was
|
|
extremely happy with the effect the tutorial seemed to have, and the warm
|
|
response I got from so many people was very encouraging.
|
|
|
|
I've done a great bit of thinking about what the most impactful topic I could
|
|
write about in 2015 could be; and decided throughout this year I will follow up
|
|
with an large endeavor for another project-based tutorial on *building a simple
|
|
functional programming language from first principles*.
|
|
|
|
This is a nontrivial topic and is unfortunately very much underserved, the
|
|
knowledge to build such a modern functional language is not widely disseminated
|
|
among many programmers. The available resources most often discuss language
|
|
theory in depth while completely glossing over the engineering details. I wished
|
|
to write a project-based tutorial that included the engineering details and left
|
|
the reader with a fully functional toy language at the end that could be
|
|
extended for further projects.
|
|
|
|
We will build a small functional language called *Fun* which is a partial
|
|
Haskell 2010 toy language; complete with a parser, type inference, datatypes,
|
|
pattern matching, desugaring, typeclasses, higher-kinded types, monadic IO,
|
|
arbitrary-rank polymorphism, records, Core language, STG intermediate language,
|
|
lazy evaluation, interpreter, native code generator, a runtime, and several
|
|
optimization passes.
|
|
|
|
As with most of my writing, this is the pre-edited rough cut version, which I
|
|
will refine over time. The compiler itself is fully complete as of December
|
|
2014, but each of the chapters (28 in total) will be staggered on a
|
|
month-by-month basis to allow me to progressively refine the text with feedback
|
|
from readers and testers. The later chapters on runtime and code generation are
|
|
somewhat involved and much longer.
|
|
|
|
\begin{flushright}
|
|
\textit{Stephen Diehl}
|
|
\end{flushright}
|
|
|
|
\clearpage
|
|
-->
|