From d4cefde9c736d5fd15115017864f0a0b88be24dc Mon Sep 17 00:00:00 2001 From: sdiehl Date: Wed, 5 Feb 2020 08:28:55 +0000 Subject: [PATCH] Write more --- resources/cover.tex | 4 +- resources/template.tex | 17 ++++++-- tutorial.md | 90 ++++++++++++++++++------------------------ 3 files changed, 54 insertions(+), 57 deletions(-) diff --git a/resources/cover.tex b/resources/cover.tex index 8914a2b..3c0faa9 100644 --- a/resources/cover.tex +++ b/resources/cover.tex @@ -6,8 +6,8 @@ \color{black} \begin{flushright} - \Huge\textbf{What I Wish I Knew When Learning Haskell}\\ - \line(1,0){450} \\ \\ + \Huge\textbf{What I Wish I Knew When Learning Haskell} + \line(1,0){450} \\ \Large{Stephen Diehl} \end{flushright} diff --git a/resources/template.tex b/resources/template.tex index 503657e..c4a47b4 100644 --- a/resources/template.tex +++ b/resources/template.tex @@ -22,10 +22,22 @@ \usepackage{tikz} \usepackage{hyperref} \hypersetup{% - colorlinks=false, % hyperlinks will be black + colorlinks=true, % hyperlinks will be black + linkcolor=black, linkbordercolor=red, % hyperlink borders will be red pdfborderstyle={/S/U/W 1} % border style will be underline of width 1pt } + +\newif\ifprint +\printtrue +\ifprint + \let\oldhref\href + \renewcommand\href[2]{% + \oldhref{#1}{#2}% + \footnote{\url{#1}}% + } +\fi + \usepackage{amssymb,amsmath} \usepackage{framed} \usepackage{fancyvrb} @@ -173,9 +185,6 @@ $include-before$ $endfor$ $if(toc)$ { -$if(colorlinks)$ -\hypersetup{linkcolor=$if(toccolor)$$toccolor$$else$black$endif$} -$endif$ \setcounter{tocdepth}{$toc-depth$} \tableofcontents diff --git a/tutorial.md b/tutorial.md index 9fe6349..92b17ee 100644 --- a/tutorial.md +++ b/tutorial.md @@ -4958,14 +4958,6 @@ the collective programmer consciousness and can often be non-intuitive to the novice. Some time is often needed to fully grok how lazy evaluation works and how to wield it's great power and when to force strictness. -See: - -* [Oh My Laziness!](http://alpmestan.com/posts/2013-10-02-oh-my-laziness.html) -* [Reasoning about Laziness](http://www.slideshare.net/tibbe/reasoning-about-laziness) -* [Lazy Evaluation of Haskell](http://www.vex.net/~trebla/haskell/lazy.xhtml) -* [More Points For Lazy Evaluation](http://augustss.blogspot.hu/2011/05/more-points-for-lazy-evaluation-in.html) -* [How Lazy Evaluation Works in Haskell](https://hackhands.com/lazy-evaluation-works-haskell/) - Strictness ---------- @@ -5290,6 +5282,15 @@ bottom, we fail at the usage site instead of the outer pattern match. ~~~~ {.haskell include="src/05-laziness/lazy_patterns.hs"} ~~~~ +External Resources +------------------ + +* [Oh My Laziness!](http://alpmestan.com/posts/2013-10-02-oh-my-laziness.html) +* [Reasoning about Laziness](http://www.slideshare.net/tibbe/reasoning-about-laziness) +* [Lazy Evaluation of Haskell](http://www.vex.net/~trebla/haskell/lazy.xhtml) +* [More Points For Lazy Evaluation](http://augustss.blogspot.hu/2011/05/more-points-for-lazy-evaluation-in.html) +* [How Lazy Evaluation Works in Haskell](https://hackhands.com/lazy-evaluation-works-haskell/) +
Prelude @@ -5811,27 +5812,8 @@ Variant Module strict bytestring Data.ByteString lazy bytestring Data.ByteString.Lazy -Escaping Text --------------- - -Haskell uses C-style single-character escape codes - -Escape Unicode Character ------- ------- ---------------------- -\\n U+000A newline -\\0 U+0000 null character -\\& n/a empty string -\\' U+0027 single quote -\\\\ U+005C backslash -\\a U+0007 alert -\\b U+0008 backspace -\\f U+000C form feed -\\r U+000D carriage return -\\t U+0009 horizontal tab -\\v U+000B vertical tab -\\" U+0022 double quote - -#### Conversions +String Conversions +------------------ Conversions between strings types ( from : left column, to : top row ) are done with several functions across the bytestring and text libraries. The mapping @@ -6018,6 +6000,27 @@ to write well-typed regex expressions as strings. ~~~~ {.haskell include="src/07-text-bytestring/regex.hs"} ~~~~ +Escaping Text +-------------- + +Haskell uses C-style single-character escape codes + +Escape Unicode Character +------ ------- ---------------------- +\\n U+000A newline +\\0 U+0000 null character +\\& n/a empty string +\\' U+0027 single quote +\\\\ U+005C backslash +\\a U+0007 alert +\\b U+0008 backspace +\\f U+000C form feed +\\r U+000D carriage return +\\t U+0009 horizontal tab +\\v U+000B vertical tab +\\" U+0022 double quote + +
Applicatives @@ -6424,7 +6427,7 @@ See: * [Control.Monad.Except](https://hackage.haskell.org/package/mtl-2.2.1/docs/Control-Monad-Except.html) -spoon +Spoon ----- Sometimes you'll be forced to deal with seemingly pure functions that can throw @@ -6445,12 +6448,13 @@ See: * [Spoon](https://hackage.haskell.org/package/spoon) -
Advanced Monads =============== +TODO + Function Monad -------------- @@ -7543,7 +7547,7 @@ scoping dictionary. ~~~~ {.haskell include="src/14-interpreters/initial_interpreter.hs"} ~~~~ -What's especially nice about this approach is how naturally catamorphisms +What is especially elegant about this approach is how naturally catamorphisms compose into efficient composite transformations. ```haskell @@ -7949,7 +7953,7 @@ Unit tests 11 tests completed ``` -silently +Silently -------- Often in the process of testing IO heavy code we'll need to redirect stdout to @@ -9975,8 +9979,6 @@ iterateN :: Int -> (a -> a) -> a -> Vector a ~~~~ {.haskell include="src/20-data-structures/vector.hs"} ~~~~ -See: [Numerical Haskell: A Vector Tutorial](http://wiki.haskell.org/Numeric_Haskell:_A_Vector_Tutorial) - Mutable Vectors --------------- @@ -10594,8 +10596,6 @@ pure and can always be rolled back if a commit fails. ~~~~ {.haskell include="src/22-concurrency/stm.hs"} ~~~~ -See: [Beautiful Concurrency](https://www.fpcomplete.com/school/advanced-haskell/beautiful-concurrency) - Monad Par --------- @@ -10806,8 +10806,6 @@ network protocol: ~~~~ {.haskell include="src/24-parsing/attoparsec.hs"} ~~~~ -See: [Text Parsing Tutorial](https://www.fpcomplete.com/school/starting-with-haskell/libraries-and-frameworks/text-manipulation/attoparsec) - Configurator ------------ @@ -11074,8 +11072,6 @@ operator (``=$``) for combining Sources and Sink and a Conduit and a Sink respec ~~~~ {.haskell include="src/25-streaming/conduit.hs"} ~~~~ -See: [Conduit Overview](https://www.fpcomplete.com/user/snoyberg/library-documentation/conduit-overview) - Cryptography @@ -13280,11 +13276,6 @@ or ST. ~~~~ {.haskell include="src/29-ghc/monad_prim.hs"} ~~~~ -See: - -* [Evaluation order and state tokens](https://www.fpcomplete.com/user/snoyberg/general-haskell/advanced/evaluation-order-and-state-tokens) - - ghc-heap-view ------------- @@ -14114,6 +14105,8 @@ primop IntSubOp "-#" Dyadic Int# -> Int# -> Int# Runtime System --------------- +TODO + The GHC runtime system is a massive part of the compiler. It comes in at around 70,000 lines of C and Cmm. There is simply no way to explain most of what occurs in the runtime succinctly. There is more than two decades worth of work that has @@ -15662,11 +15655,6 @@ Commutative Diagrams TODO -String Diagrams ---------------- - -TODO - Kleisli Category ----------------