├── .gitattributes
├── .gitignore
├── .ruby-version
├── README.md
├── _layouts
├── default.html
└── page.html
├── category-theory
└── recursion-schemes.md
├── effect-systems
└── index.md
├── higher-type-theory
└── index.md
├── images
├── arrow-down.png
└── octocat-small.png
├── index.md
├── javascripts
└── scale.fix.js
├── module-systems
└── index.md
├── params.json
└── stylesheets
├── github-light.css
└── styles.css
/.gitattributes:
--------------------------------------------------------------------------------
1 | index.md merge=union
2 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | _site
2 |
--------------------------------------------------------------------------------
/.ruby-version:
--------------------------------------------------------------------------------
1 | 2.2.2
2 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | index.md
--------------------------------------------------------------------------------
/_layouts/default.html:
--------------------------------------------------------------------------------
1 | {% assign base = '' %}
2 | {% assign depth = page.url | split: '/' | size | minus: 1 %}
3 | {% if depth == 1 %}{% assign base = '.' %}
4 | {% elsif depth == 2 %}{% assign base = '..' %}
5 | {% elsif depth == 3 %}{% assign base = '../..' %}
6 | {% elsif depth == 4 %}{% assign base = '../../..' %}
7 | {% endif %}
8 |
9 |
10 |
11 |
12 |
13 | PLT by steshaw
14 |
15 |
16 |
17 |
18 |
19 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
32 |
33 |
38 |
39 |
40 |
41 |
44 |
49 |
50 |
51 |
55 |
61 |
62 |
63 |
64 |
--------------------------------------------------------------------------------
/_layouts/page.html:
--------------------------------------------------------------------------------
1 | ---
2 | layout: default
3 | ---
4 |
5 | {{ content }}
6 |
7 |
--------------------------------------------------------------------------------
/category-theory/recursion-schemes.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: page
3 | title: Category Theory — Recursion Schemes
4 | ---
5 |
6 | Recursion Schemes
7 | -----------------
8 |
9 | ### Books
10 |
11 | - [AoP](http://www.amazon.com/books/dp/013507245X) - The Algebra of Programming - Richard Bird, Oege de Moor
12 |
13 |
14 | ### Papers
15 | - [Functional Programming with Bananas, Lenses, Envelopes and Barbed Wire](https://maartenfokkinga.github.io/utwente/mmf91m.pdf) — Erik Meijer, Maarten Fokkinga, Ross Paterson
16 | - [Origami programming](https://www.cs.ox.ac.uk/jeremy.gibbons/publications/origami.pdf) — Jeremy Gibbons
17 | - [Data types à la carte](https://webspace.science.uu.nl/~swier004/publications/2008-jfp.pdf) - Wouter Swierstra
18 |
19 |
20 | ### Talks
21 |
22 | - [Going Bananas](https://youtu.be/3DoqZOcn1ro), Ralf Lämmel
23 | - [Categories for the Working Haskeller](https://skillsmatter.com/skillscasts/5787-categories-for-the-working-haskeller) — Jeremy Gibbons
24 |
25 |
26 | ### Articles
27 |
28 | - Edward Kmett
29 | - [Recursion Schemes: A Field Guide (Redux)](http://comonad.com/reader/2009/recursion-schemes/)
30 | - [Catamorphisms](http://comonad.com/haskell/catamorphisms.html) (previously a Google "Knol")
31 | - [recursion-schemes Haskell package](https://hackage.haskell.org/package/recursion-schemes)
32 | - Series by Patrick Thomson
33 | - [An Introduction to Recursion Schemes](https://blog.sumtypeofway.com/posts/introduction-to-recursion-schemes.html)
34 | - [Recursion Schemes, Part II: A Mob of Morphisms](https://blog.sumtypeofway.com/posts/recursion-schemes-part-2.html)
35 | - [Recursion Schemes, Part III: Folds in Context](https://blog.sumtypeofway.com/posts/recursion-schemes-part-3.html)
36 | - [Recursion Schemes, Part IV: Time is of the Essence](https://blog.sumtypeofway.com/posts/recursion-schemes-part-4.html)
37 | - [Recursion Schemes, Part 4½: Better Living Through Base Functor](https://blog.sumtypeofway.com/posts/recursion-schemes-part-4-point-5.html)
38 | - [Recursion Schemes, Part V: Hello, Hylomorphisms](https://blog.sumtypeofway.com/posts/recursion-schemes-part-5.html)
39 | - Sandy Maguire's [Review: Bananas, Lenses, Envelopes and Barbed Wire](https://reasonablypolymorphic.com/blog/recursion-schemes/)
40 |
--------------------------------------------------------------------------------
/effect-systems/index.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: page
3 | title: Effect Systems
4 | ---
5 |
6 | # Effect Systems
7 |
8 | * [**Effects bibliography**][effects-bib]
9 | by [Jeremy Yallop][yallop]
10 |
11 | * [**Having an Effect**][having-effect]
12 | by [Oleg Kiselyov][oleg]
13 |
14 |
15 | [effects-bib]: https://github.com/yallop/effects-bibliography
16 | [having-effect]: http://okmij.org/ftp/Computation/having-effect.html
17 |
18 | [oleg]: http://okmij.org/ftp/
19 | [yallop]: https://www.cl.cam.ac.uk/~jdy22/
20 |
--------------------------------------------------------------------------------
/higher-type-theory/index.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: page
3 | title: Higher Type Theory
4 | ---
5 |
6 | # Higher Type Theory
7 |
8 |
9 | ## Motivation
10 |
11 | - [Gershom Bazerman - Homotopy Type Theory: What's the Big Idea](https://youtu.be/OupcXmLER7I)
12 |
13 |
14 | ## Background
15 |
16 | - [Algebraic Topology](http://www.math.cornell.edu/~hatcher/AT/ATpage.html) — Allen Hatcher
17 | - [Intuitionistic Type Theory](https://web.archive.org/web/20201112015534/https://www.csie.ntu.edu.tw/~b94087/ITT.pdf) — Per Martin-Löf's
18 |
19 |
20 | ## Courses
21 |
22 | -
23 | -
24 |
25 |
26 | ## Homotopy Type Theory (HoTT)
27 |
28 | -
29 | -
30 | -
31 |
--------------------------------------------------------------------------------
/images/arrow-down.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/steshaw/plt/4a2f354e9a0f91f7d67664d26c2dd7ffe0f6771c/images/arrow-down.png
--------------------------------------------------------------------------------
/images/octocat-small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/steshaw/plt/4a2f354e9a0f91f7d67664d26c2dd7ffe0f6771c/images/octocat-small.png
--------------------------------------------------------------------------------
/index.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: page
3 | title: Programming Language Theory
4 | ---
5 |
6 |
7 | Programming Language Theory
8 | ===========================
9 |
10 | Learning about _Programming Language Theory_ can be a tough journey,
11 | particularly for programming practitioners who haven't studied it formally.
12 | This resource is here to help. Please feel free to get in touch if you have
13 | ideas for improvement.
14 |
15 | #### 💡 Top Tips
16 |
17 | For a quick course in Type Theory, Philip Wadler recommends: _[Types and
18 | Programming Languages](http://www.cis.upenn.edu/~bcpierce/tapl/)_, _[Proofs
19 | and Types](http://www.paultaylor.eu/stable/Proofs+Types.html)_, followed by
20 | _[Advanced Topics in Types and Programming
21 | Languages](https://www.cis.upenn.edu/~bcpierce/attapl/)_.
22 |
23 | See also Daniel Gratzer's [Learn Type Theory](https://github.com/jozefg/learn-tt), and Darryl McAdams's [So you want to learn type theory](https://web.archive.org/web/20190213100051/http://purelytheoretical.com/sywtltt.html).
24 |
25 |
26 |
27 | Type Theory
28 | -----------
29 |
30 | ### Books
31 |
32 | - [PLFA](https://plfa.github.io/) - Programming Language Foundations in Agda - [Philip Wadler](https://github.com/wadler), [Wen Kokke](https://github.com/wenkokke)
33 | - [SF](https://softwarefoundations.cis.upenn.edu/) - Software Foundations - Benjamin C. Pierce et al. [Available with jsCoq](https://jscoq.github.io/ext/sf/)
34 | - [TAPL](http://www.cis.upenn.edu/~bcpierce/tapl/) - Types and Programming Languages - Benjamin C. Pierce
35 | - [PROT](http://www.paultaylor.eu/stable/Proofs+Types.html) Proofs and Types - Jean-Yves Girard, Yves Lafont and Paul Taylor - 1987-90 [pdf](http://www.paultaylor.eu/stable/prot.pdf)
36 | - [PFPL](http://www.cs.cmu.edu/~rwh/pfpl/) - Practical Foundations for Programming Languages (Second Edition) - Robert Harper [Online preview edition](http://www.cs.cmu.edu/~rwh/pfpl/2nded.pdf)
37 | - [ATTAPL](http://www.cis.upenn.edu/~bcpierce/attapl/) - Advanced Topics in Types and Programming Languages - Edited by Benjamin C. Pierce
38 | - [CPDT](http://adam.chlipala.net/cpdt/) - Certified Programming with Dependent Types - Adam Chlipala
39 | - [SEwPR](https://mitpress.mit.edu/9780262062756/semantics-engineering-with-plt-redex/) - Semantics Engineering with PLT Redex - Matthias Felleisen, Robby Findler, and Matthew Flatt. [Redex](https://redex.racket-lang.org/)
40 | - [HoTT](http://homotopytypetheory.org/book/) - Homotopy Type Theory, Univalent Foundations of Mathematics
41 | - [Coq'Art](http://www.labri.fr/perso/casteran/CoqArt/index.html) Interactive Theorem Proving and Program Development, Coq'Art: The Calculus of Inductive Constructions - Yves Bertot, Pierre Castéran.
42 | - [TTFP](http://www.cs.kent.ac.uk/people/staff/sjt/TTFP/) - Type Theory and Functional Programming - Simon Thompson, 1991
43 | - [PiMLTT](http://www.cse.chalmers.se/research/group/logic/book/) - Programming in Martin-Löf's Type Theory, An Introduction - Bengt Nordström, Kent Petersson, Jan M. Smith
44 | - Using, Understanding, and Unravelling The OCaml Language — An introduction [pdf](http://pauillac.inria.fr/~remy/cours/appsem/ocaml.pdf)
45 | - Polymorphic typing of an algorithmic language (PhD Thesis) - Xavier Leroy [pdf](https://xavierleroy.org/publi/phd-thesis.pdf)
46 | - [ATP](http://www.cl.cam.ac.uk/~jrh13/atp/) - Handbook of Practical Logic and Automated Reasoning - John Harrison
47 | - Basic Simple Type Theory - J. Roger Hindley [pdf](http://mathtrielhighschool.files.wordpress.com/2011/08/number-theory.pdf) [paperback@booko](http://booko.com.au/9780521054225/Basic-Simple-Type-Theory)
48 | - [Lambda Calculus and Combinators](http://www.cambridge.org/us/academic/subjects/computer-science/programming-languages-and-applied-logic/lambda-calculus-and-combinators-introduction-2nd-edition) [pdf](http://pds14.egloos.com/pds/200901/16/93/Lambda-Calculus_and_Combinators.pdf) — J. Roger Hindley and Jonathan P. Seldin
49 | - [Semantics with Applications: An Appetizer](https://www.cs.ru.nl/~herman/onderwijs/semantics2019/wiley.pdf) — Hanne Riis Nielson, Flemming Nielson
50 | - An Introduction to Lambda Calculi for Computer Scientists - Chris Hankin
51 | - [The Definition of Standard ML (1990) and Commentary on Standard ML (1991)](https://web.archive.org/web/20180927020934/http://www.itu.dk/people/tofte/publ/1990sml/1990sml.html) [definition (pdf)](https://web.archive.org/web/20160518190441/http://www.itu.dk/people/tofte/publ/1990sml/1990sml.pdf) [commentary (pdf)](https://web.archive.org/web/20160917123723/https://www.itu.dk/people/tofte/publ/1990sml/1991commentaryBody.pdf)
52 | - [The Definition of Standard ML (Revised)](https://smlfamily.github.io/sml97-defn.pdf) - Milner, Fofte, Harper, and MacQueen
53 | - [Programs and Proofs](http://ilyasergey.net/pnp/) — Ilya Sergey [pdf](http://ilyasergey.net/pnp/pnp.pdf)
54 | - [Type Theory and Formal Proof: An Introduction](https://www.cambridge.org/core/books/type-theory-and-formal-proof/0472640AAD34E045C7F140B46A57A67C) — Rob Nederpelt, Herman Geuvers
55 | - [Lectures on the Curry-Howard Isomorphism (pdf)](http://disi.unitn.it/~bernardi/RSISE11/Papers/curry-howard.pdf)
56 | - Program = Proof — Samuel Mimram [pdf](https://www.lix.polytechnique.fr/Labo/Samuel.Mimram/teaching/INF551/course.pdf)
57 |
58 |
59 | ### Papers
60 |
61 | - [A Tutorial Implementation of a Dependently Typed Lambda Calculus](http://www.andres-loeh.de/LambdaPi/) — Andres Löh, Conor McBride and Wouter Swierstra [pdf](http://www.andres-loeh.de/LambdaPi/LambdaPi.pdf). Previously published as [Simply Easy](http://strictlypositive.org/Easy.pdf).
62 | - [ΠΣ: Dependent Types without the Sugar](https://www.andres-loeh.de/PiSigma/PiSigma.pdf) - Thorsten Altenkirch, Nils Anders Danielsson, Andres Löh, and Nicolas Oury
63 | - [Lambda Calculi with Types](http://ttic.uchicago.edu/~dreyer/course/papers/barendregt.pdf) — Henk Barendregt
64 | - [Intuitionistic Type Theory](http://www.csie.ntu.edu.tw/~b94087/ITT.pdf)
65 | - [Type Theory](https://plato.stanford.edu/entries/type-theory/) - Thierry Coquand
66 |
67 |
68 | ### Videos
69 |
70 | - [OPLSS — Oregon Programming Language Summer School](https://www.cs.uoregon.edu/research/summerschool/)
71 | - [OPLSS 2023 — Types, Semantics, and Logic](https://www.cs.uoregon.edu/research/summerschool/summer23/topics.php)
72 | - [OPLSS 2022 — Types, Semantics, and Program Reasoning](https://www.cs.uoregon.edu/research/summerschool/summer22/topics.php)
73 | - [OPLSS 2021 — Foundations of Programming and Security](https://www.cs.uoregon.edu/research/summerschool/summer21/topics.php)
74 | - [OPLSS 2019 — Foundations of Probabilistic Programming and Security](https://www.cs.uoregon.edu/research/summerschool/summer19/topics.php)
75 | - [OPLSS 2018 — Parallelism and Concurrency](https://www.cs.uoregon.edu/research/summerschool/summer18/topics.php)
76 | - [OPLSS 2017 — A Spectrum of Types](https://www.cs.uoregon.edu/research/summerschool/summer17/topics.php)
77 | - [OPLSS 2016 — Types, Logic, Semantics, and Verification](http://www.cs.uoregon.edu/research/summerschool/summer16/curriculum.php)
78 | - [OPLSS 2015 — Types, Logic, Semantics, and Verification](http://www.cs.uoregon.edu/research/summerschool/summer15/curriculum.html)
79 | - [OPLSS 2014 — Types, Logic, Semantics, and Verification](http://www.cs.uoregon.edu/research/summerschool/summer14/curriculum.html)
80 | - [OPLSS 2013 — Types, Logic, and Verification](http://www.cs.uoregon.edu/research/summerschool/summer13/curriculum.html)
81 | - [OPLSS 2012 — Logic, Languages, Compilation, and Verification](http://www.cs.uoregon.edu/research/summerschool/summer12/curriculum.html)
82 | - [OPLSS 2011 — Types, Semantics and Verification](http://www.cs.uoregon.edu/research/summerschool/summer11/curriculum.html)
83 | - [OPLSS 2010 — Logic, Languages, Compilation, and Verification](http://www.cs.uoregon.edu/research/summerschool/summer10/curriculum.html)
84 | - [Complete archives 2002-Present](https://www.cs.uoregon.edu/research/summerschool/archives.html)
85 | - [HoTTEST — Homotopy Type Theory Summer School 2022](https://www.uwo.ca/math/faculty/kapulkin/seminars/hottest_summer_school_2022.html)
86 | - [ICFP 2012 Monday keynote. Conor McBride: Agda-curious?](https://youtu.be/XGyJ519RY6Y)
87 |
88 |
89 | ### Subtopics
90 |
91 | - [Higher Type Theory]({{site.github.url | replace: 'http://', '//'}}/higher-type-theory/)
92 | - [Module Systems]({{site.github.url | replace: 'http://', '//'}}/module-systems/)
93 | - [Effect Systems]({{site.github.url | replace: 'http://', '//'}}/effect-systems/)
94 |
95 |
96 |
97 | Programming Languages
98 | ---------------------
99 |
100 |
101 | ### Books
102 |
103 | - [DCPL](https://mitpress.mit.edu/9780262201759/design-concepts-in-programming-languages/) - Design Concepts in Programming Languages – Franklyn Turbak and David Gifford, 2008. [Course](https://ocw.mit.edu/courses/6-821-programming-languages-fall-2002/)
104 | - [CTM](http://www.info.ucl.ac.be/~pvr/book.html) - Concepts, Techniques, and Models of Computer Programming, Peter Van Roy and Seif Haridi
105 | - [EOPL](http://www.eopl3.com/) - Essentials of Programming Languages, 3rd Edition - Daniel P. Friedman
106 | - [PLAI](https://www.plai.org/) - Programming Languages: Application and Interpretation - Shriram Krishnamurthi
107 | - [PAIP](https://github.com/norvig/paip-lisp) Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp - Peter Norvig, 1992
108 | - [PLP](http://cs.rochester.edu/u/scott/pragmatics/) Programming Language Pragmatics - Michael L. Scott
109 | - [FSPL](https://mitpress.mit.edu/books/formal-semantics-programming-languages) The Formal Semantics of Programming Languages - Glynn Winskel
110 | - [PL:BPC](https://www.build-prove-compare.net/) Programming Languages: Build, Prove, and Compare - Norman Ramsey
111 |
112 |
113 | ### Papers
114 |
115 | - [An argument against call/cc](http://okmij.org/ftp/continuations/against-callcc.html) — Oleg Kiselyov
116 |
117 |
118 |
119 | Compiler Construction
120 | ---------------------
121 |
122 |
123 | ### Books
124 |
125 | - [MinCaml](http://esumii.github.io/min-caml/index-e.html) - A Crash Course for the MinCaml Compiler
126 | - [MCIiML](http://www.cs.princeton.edu/~appel/modern/ml/) Modern Compiler Implementation in ML - Andrew W. Appel
127 | - [pj-lester-book](https://www.microsoft.com/en-us/research/publication/implementing-functional-languages-a-tutorial) Implementing functional languages: a tutorial - Simon Peyton Jones and David Lester, 1992
128 | - [slpj-book-1987](https://www.microsoft.com/en-us/research/wp-content/uploads/1987/01/slpj-book-1987.pdf) - The Implementation of Functional Programming Languages - Simon Peyton Jones - 1987
129 | - [MCD-2e](http://www.dickgrune.com/Books/MCD_2nd_Edition/) Modern Compiler Design, Second Edition — Dick Grune et al.
130 | - [EaC-2e](https://dl.acm.org/doi/10.1145/2088883.2088908) Engineering a Compiler, 2nd Edition, Cooper and Torczon
131 | - [Compiler Construction](https://people.inf.ethz.ch/wirth/CompilerConstruction/index.html), Niklaus Wirth
132 | - [DragonBook](https://suif.stanford.edu/dragonbook/) - "The Dragon Book" Compilers: Principles, Techniques, and Tools
133 | - [LiSP](http://www.cambridge.org/us/academic/subjects/computer-science/programming-languages-and-applied-logic/lisp-small-pieces) - Lisp in Small Pieces - Christian Queinnec
134 | - [CwC](http://www.cambridge.org/us/academic/subjects/computer-science/programming-languages-and-applied-logic/compiling-continuations) Compiling with Continuations - Andrew W. Appel
135 | - [Static Program Analysis](https://cs.au.dk/~amoeller/spa/spa.pdf), Anders Møller and Michael I. Schwartzbach
136 | - [List of compiler books at the GCC Wiki](http://gcc.gnu.org/wiki/ListOfCompilerBooks)
137 |
138 |
139 | ### Papers
140 |
141 | - [An Incremental Approach to Compiler Construction](http://scheme2006.cs.uchicago.edu/11-ghuloum.pdf), Abdulaziz Ghuloum
142 | - [A Nanopass Framework for Compiler Education](http://www.cs.indiana.edu/~dyb/pubs/nano-jfp.pdf), Dipanwita Sarkar, Oscar Waddell, R. Kent Dybvig
143 | - [A Nanopass Framework for Commercial Compiler Development](http://andykeep.com/pubs/dissertation.pdf), [Andrew W. Keep](http://andykeep.com/)
144 | - [ZINC](http://caml.inria.fr/pub/papers/xleroy-zinc.pdf) - The ZINC experiment, an economical implementation of the ML language - Xavier Leroy (Technical Report) [more OCaml papers](http://caml.inria.fr/about/papers.en.html)
145 |
146 |
147 | ### Videos
148 |
149 | - [Stanford - Compilers](https://online.stanford.edu/course/compilers-0) - Alex Aiken
150 |
151 |
152 |
153 | Runtime systems
154 | ---------------
155 |
156 |
157 | ### Books
158 |
159 | - [The Garbage Collection Handbook, The Art of Automatic Memory Management](http://gchandbook.org/) — Richard Jones, Antony Hosking, Eliot Moss, 2011.
160 |
161 |
162 | ### Papers
163 |
164 | - [Debunking the 'Expensive Procedure Call' Myth, or, Procedure Call Implementations Considered Harmful, or, Lambda: The Ultimate GOTO](https://web.archive.org/web/20180406191621/http://library.readscheme.org/page1.html) — Guy Lewis Steele, Jr. (1977) [pdf](https://web.archive.org/web/20180130013734/http://repository.readscheme.org/ftp/papers/ai-lab-pubs/AIM-443.pdf)
165 |
166 |
167 |
168 | Functional Programming
169 | ----------------------
170 |
171 |
172 | ### Books
173 |
174 | - [Bird and Wadler](http://usi-pl.github.io/lc/sp-2015/doc/Bird_Wadler.%20Introduction%20to%20Functional%20Programming.1ed.pdf) - Introduction to Functional Programming, 1st Edition - Bird and Wadler
175 | - [AoP](http://www.amazon.com/books/dp/013507245X) - The Algebra of Programming - Richard Bird, Oege de Moor
176 | - [Programming in Haskell](http://www.cs.nott.ac.uk/~gmh/book.html) — Graham Hutton (2007)
177 | - [RWH](http://book.realworldhaskell.org/) - Real World Haskell - Bryan O'Sullivan, Don Stewart, and John Goerzen
178 | - [FPiS](http://www.manning.com/bjarnason/) - Functional Programming in Scala - Paul Chiusano and Rúnar Bjarnason
179 | - [SICP](http://mitpress.mit.edu/sicp/), Structure and Interpretation of Computer Programs, by Abelson, Sussman, and Sussman
180 | - [PCPH](http://chimera.labs.oreilly.com/books/1230000000929) - Parallel and Concurrent Programming in Haskell - Simon Marlow
181 | - [RWOC](https://realworldocaml.org/) - Real World OCaml - Jason Hickey, Anil Madhavapeddy, and Yaron Minsky
182 | - [Developing Applications With OCaml](http://caml.inria.fr/pub/docs/oreilly-book/index.html) — Emmanuel Chailloux, Pascal Manoury and Bruno Pagano (2000)
183 | - [BTLS](http://www.ccs.neu.edu/home/matthias/BTLS/) - The Little Schemer - Daniel P. Friedman, Matthias Felleisen
184 | - [BTSS](http://www.ccs.neu.edu/home/matthias/BTSS/) - The Seasoned Schemer - Daniel P. Friedman, Matthias Felleisen
185 | - [BTML](http://www.ccs.neu.edu/home/matthias/BTML/) - The Little MLer - Matthias Felleisen, Daniel P. Friedman
186 | - [The Reasoned Schemer](http://minikanren.org/) and miniKanren
187 | - [HTDP](http://www.htdp.org/) - How to Design Programs - Matthias Felleisen, Robert Findler, Matthew Flatt, Shriram Krishnamurthi
188 | - [HR](http://homepages.cwi.nl/~jve/HR/) - The Haskell Road to Logic, Maths and Programming - 2nd Ed. - Kees Doets, Jan van Eijck [pdf](http://fldit-www.cs.uni-dortmund.de/~peter/PS07/HR.pdf)
189 | - A Book of Abstract Algebra - 2nd Ed. - Charles C. Pinter [booko](http://booko.com.au/9780486474175/Book-of-Abstract-Algebra)
190 | - Purely Functional Data Structures - Chris Okasaki [phd-thesis in pdf](http://www.cs.cmu.edu/~rwh/theses/okasaki.pdf) [paperback@booko](http://booko.com.au/9780521663502/Purely-Functional-Data-Structures) [More purely functional data structures](http://cstheory.stackexchange.com/questions/1539/whats-new-in-purely-functional-data-structures-since-okasaki)
191 |
192 |
193 | ### Papers
194 |
195 | - [Lambda Papers](http://library.readscheme.org/page1.html) - Lambda: The Ultimate Imperative/Declarative/GOTO - Guy Steele and Gerald Sussman
196 | - [The Lambda Calculus](https://plato.stanford.edu/entries/lambda-calculus/) - Jesse Alama and Johannes Korbacher
197 | - [A Tutorial Introduction to the Lambda Calculus](https://personal.utdallas.edu/~gupta/courses/apl/lambda.pdf) - Raul Rojas
198 | - [Exploring Generic Haskell](http://www.andres-loeh.de/ExploringGH.pdf) (PhD thesis) - [Andres Löh](http://www.andres-loeh.de/). This an epic, accessible, book-length PhD on datatype generic programming.
199 | - ICFP accepted papers
200 | - [2019](https://github.com/llelf/icfp2019-papers)
201 | - [2018](https://icfp18.sigplan.org/track/icfp-2018-papers#program), [video playlist](https://www.youtube.com/watch?v=Z3vr5xylMCE&list=PLnqUlCo055hVknu7QAW_RUZRmRZWXmnvv)
202 | - [2017](https://github.com/gasche/icfp2017-papers), [video playlist](https://www.youtube.com/watch?v=RoddXtl8SU8&list=PLnqUlCo055hW7kU-SBQEhC_87etA5Gqlq)
203 | - [2016](https://github.com/gasche/icfp2016-papers), [video playlist](https://www.youtube.com/watch?v=EpifLmPM1L0&list=PLnqUlCo055hV-Yb_88YYUC2ucaBKCWCsa)
204 | - [2015](https://github.com/mpickering/icfp2015-papers), [by session](http://icfpconference.org/icfp2015/toc.html), [video playlist](https://www.youtube.com/watch?v=PI99A08Y83E&list=PLnqUlCo055hWNtUo1Haoq347VhCqIjs7u)
205 | - [2014](https://github.com/yallop/icfp2014-papers)
206 | - [2013](https://github.com/gasche/icfp2013-papers)
207 | - [2012](https://github.com/technogeeky/icfp12-paper-links)
208 |
209 |
210 | ### Videos
211 |
212 | - [C9 Lectures: Dr. Erik Meijer - Functional Programming Fundamentals](http://channel9.msdn.com/Series/C9-Lectures-Erik-Meijer-Functional-Programming-Fundamentals)
213 | - [C9 Lectures: Dr. Ralf Lämmel - Going Bananas + Advanced Functional Programming](http://channel9.msdn.com/Tags/ralf-laemmel)
214 | - [Datatype-Generic Programming in Haskell](http://skillsmatter.com/podcast/home/a-haskell-lecture-with-leading-expert-andres-loh) - [Andres Löh](http://www.andres-loeh.de/) - [slides in pdf](http://www.andres-loeh.de/GP-ITB.pdf)
215 |
216 |
217 |
218 | Category Theory
219 | ---------------
220 |
221 | Philip Wadler's advice here is "read Pierce for motivation, Mac Lane for the
222 | presentation of the maths".
223 |
224 |
225 | ### Books
226 |
227 | - [Cakes, Custard and Category Theory: Easy recipes for understanding complex maths](http://www.amazon.com/Cakes-Custard-Category-Theory-understanding-ebook/dp/B00TA8SIV6) — [Eugenia Cheng](http://eugeniacheng.com/)
228 | - Category Theory, Steve Awodey. [pdf](https://pages.jh.edu/rrynasi1/NewFoundations4Math/Literature/Textbooks/Awodey2010CategoryTheory.2ndEdition.pdf) [course](https://pages.jh.edu/rrynasi1/NewFoundations4Math/Literature/Textbooks/Awodey2016CategoryTheory.LectureNotes/)
229 | - Basic Category Theory for Computer Scientists - Benjamin C. Pierce. Previously available in a draft entitled [A taste of category theory for computer scientists](https://kilthub.cmu.edu/articles/journal_contribution/A_taste_of_category_theory_for_computer_scientists/6602756/1)
230 | - [Categories for the Working Mathematician](http://www.mtm.ufsc.br/~ebatista/2016-2/maclanecat.pdf) — Saunders Mac Lane
231 | - [Conceptual Mathematics](http://www.cambridge.org/us/academic/subjects/mathematics/logic-categories-and-sets/conceptual-mathematics-first-introduction-categories-2nd-edition) A First Introduction to Categories, 2nd Edition - F. William Lawere and Stephen H. Schanuel
232 | - [Category Theory for the Sciences](http://category-theory.mitpress.mit.edu/) — David I. Spivak. Previously available in a draft entitled [Category Theory for Scientists](http://math.mit.edu/~dspivak/CT4S.pdf)
233 | - [CTCS-2nd](http://www.math.mcgill.ca/triples/Barr-Wells-ctcs.pdf) Category Theory for Computing Science - Michael Barr and Charles Wells [CTCS-1st](http://fef.ogu.edu.tr/matbil/eilgaz/kategori.pdf)
234 | - Categories, Types, and Structures: An Introduction to Category Theory for the Working Computer Scientist [pdf](http://www.cs.unibo.it/~asperti/PAPERS/book.pdf)
235 | - Topoi, The Categorical Analysis of Logic, Robert Goldblatt [Amazon](http://www.amazon.com/Topoi-Categorial-Analysis-Logic-Mathematics/dp/0486450260)
236 | - [TTT](http://www.tac.mta.ca/tac/reprints/articles/12/tr12abs.html) - Toposes, Triples and Theories - Michael Barr and Charles Wells
237 | - Category Theory Lectures Notes for ESSLLI - Michael Barr and Charles Wells [pdf](http://www.math.upatras.gr/~cdrossos/Docs/B-W-LectureNotes.pdf)
238 | - [Seven Sketches in Compositionality: An Invitation to Applied Category Theory](https://arxiv.org/abs/1803.05316) - Brendan Fong, David I Spivak
239 | - [Applied Category Theory Course](http://www.azimuthproject.org/azimuth/show/Applied+Category+Theory+Course) - online course conducted by John Baez [forum](https://forum.azimuthproject.org/discussion/1717/welcome-to-the-applied-category-theory-course)
240 | - [CTFP](https://bartoszmilewski.com/2014/10/28/category-theory-for-programmers-the-preface/) - Category Theory for Programmers - [Bartosz Milewski](https://github.com/BartoszMilewski). The [free PDF version](https://github.com/hmemcpy/milewski-ctfp-pdf) was created by [Igal Tabachnik](https://github.com/hmemcpy). Video lectures based on this material: [part 1](https://www.youtube.com/watch?v=I8LbkfSSR58&list=PLbgaMIhjbmEnaH_LTkxLI7FMa2HsnawM_), [part 2](https://www.youtube.com/watch?v=3XTQSx1A3x8&list=PLbgaMIhjbmElia1eCEZNvsVscFef9m0dm), [part 3](https://www.youtube.com/watch?v=F5uEpKwHqdk&list=PLbgaMIhjbmEn64WVX4B08B4h2rOtueWIL).
241 | - [CT4P](https://arxiv.org/abs/2209.01259) Category Theory for Programming — Benedikt Ahrens, Kobe Wullaert
242 |
243 |
244 | ### Journals
245 |
246 | - [TAC](http://www.tac.mta.ca/tac/) - Theory and Applications of Categories
247 |
248 |
249 | ### Subtopics
250 |
251 | - [Recursion Schemes]({{site.github.url | replace: 'http://', '//'}}/category-theory/recursion-schemes.html)
252 |
253 |
254 |
255 | Mathematics
256 | -----------
257 |
258 | Some related maths resources.
259 |
260 |
261 | ### Mathematical Literacy/Thinking
262 |
263 | It can be useful to have some background in mathematical thinking.
264 |
265 | - [Introduction to Mathematical Thinking](http://www.amazon.com/Introduction-Mathematical-Thinking-Keith-Devlin-ebook/dp/B009LTPSTO) — [Keith Devlin](http://profkeithdevlin.org/)
266 | - [How to prove it](http://www.amazon.com/How-Prove-It-Structured-Approach/dp/0521675995) — Daniel J. Velleman
267 |
268 |
269 | ### Algebra
270 |
271 | - [A Computational Introduction to Number Theory and Algebra](http://shoup.net/ntb/) — Victor Shoup
272 | - Advanced Modern Algebra — Joseph J. Rotman [pdf](http://www.math.hcmuns.edu.vn/~nvdong/DaiSoDaiCuong/Advanced%20Modern%20Algebra%20-%20Joseph%20J.%20Rotman.pdf)
273 | - A Survey of Modern Algebra — Birkhoff and MacLane [Scribd](https://www.scribd.com/doc/127988704/Birkhoff-a-Survey-of-Modern-Algebra)
274 |
275 |
276 |
277 | Other collections
278 | -----------------
279 |
280 | - [Great Works in Programming Languages](http://www.cis.upenn.edu/~bcpierce/courses/670Fall04/GreatWorksInPL.shtml) — Benjamin Piece
281 | - [Classic Papers in Programming Languages and Logic](http://www.cs.cmu.edu/~crary/819-f09/) — Karl Crary
282 | - [The collected works of Per Martin-Löf](https://github.com/michaelt/martin-lof) — Michael Thompson and others
283 | - [PLT Texts Online](https://web.archive.org/web/20141002195305/http://www.cs.uu.nl:80/wiki/Techno/ProgrammingLanguageTheoryTextsOnline) — Frank Atanassow
284 | - [Functional programming books overview](http://alexott.net/en/fp/books/) — Alex (Alexey) Ott
285 | - [TypeFunc](https://github.com/williamdemeo/TypeFunc) — William Demeo
286 | - [Lambda the Ultimate](http://lambda-the-ultimate.org/) — Ehud Lamm et al.
287 | - [Archives of Lambda the Ultimate](http://www.angelfire.com/tx4/cus/lambda.html) (stale but includes "classic") — Chris Rathman
288 | - [Programming Language People](http://www.angelfire.com/tx4/cus/people/index.html) — Chris Rathman
289 | - [PL Summer Schools forall](https://gist.github.com/biboudis/377b4a4de4d1718df2d0) — [Aggelos Biboudis](http://biboudis.github.io/)
290 | - [Summer Schools Interesting Conferences](http://user.it.uu.se/~bengt/Info/summer-schools.shtml) — [Bengt Jonsson](http://user.it.uu.se/~bengt/)
291 | - [The Programming Language Zoo](http://andrej.com/plzoo/) — [Andrej Bauer](http://math.andrej.com/)
292 | - [Max Bernstein' PL resources](https://bernsteinbear.com/pl-resources/)
293 | - [Programming Language Research](https://github.com/imteekay/programming-language-research) — [TK](https://www.iamtk.co)
294 |
--------------------------------------------------------------------------------
/javascripts/scale.fix.js:
--------------------------------------------------------------------------------
1 | fixScale = function(doc) {
2 |
3 | var addEvent = 'addEventListener',
4 | type = 'gesturestart',
5 | qsa = 'querySelectorAll',
6 | scales = [1, 1],
7 | meta = qsa in doc ? doc[qsa]('meta[name=viewport]') : [];
8 |
9 | function fix() {
10 | meta.content = 'width=device-width,minimum-scale=' + scales[0] + ',maximum-scale=' + scales[1];
11 | doc.removeEventListener(type, fix, true);
12 | }
13 |
14 | if ((meta = meta[meta.length - 1]) && addEvent in doc) {
15 | fix();
16 | scales = [.25, 1.6];
17 | doc[addEvent](type, fix, true);
18 | }
19 |
20 | };
--------------------------------------------------------------------------------
/module-systems/index.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: page
3 | title: Module Systems
4 | ---
5 |
6 | # Module Systems
7 |
8 |
9 | ## Courses
10 |
11 | - [_Parametricity and Modular Reasoning_](https://wiki.mpi-sws.org/star/paramore)
12 | by [Derek Dreyer][dreyer]
13 |
14 |
15 | ## Modular Type Classes
16 |
17 | [_Modular Type Classes_](http://www.cse.unsw.edu.au/~chak/papers/DHC07.html) - the original paper
18 | by [Derek Dreyer][dreyer], [Robert Harper][harper], and [Manuel M.T. Chakravarty][chak].
19 |
20 | I found the paper kind of tough going but I recall that presentation gives a
21 | really good intuition about it.
22 |
23 | [View via Google Docs](https://docs.google.com/viewer?url=www.mpi-sws.org/~dreyer/talks/popl07.ppt)
24 |
25 | Extract of the SML code from the presentation/paper
26 |
27 |
28 | The authors note that to make these "type classes" convenient in SML,
29 | you'd need to add implicit parameters (ala Scala - this is after
30 | Odersky's "poor man's type classes" but I'm not sure if they were
31 | inspired by it here).
32 |
33 | A related paper with Stefan Wehr:
34 | . Stefan
35 | further developed theses ideas in his [thesis with a Java extension][wehr].
36 |
37 | [Scott Kilpatrick][skilpat] (working on "modules" for Haskell — a better package
38 | system AFAIK). This is [Backpack](http://plv.mpi-sws.org/backpack/) for
39 | Haskell/GHC.
40 |
41 | Scott's revelation when he finds the "modular type classes" work
42 |
43 |
44 | [MixML](http://www.mpi-sws.org/~rossberg/mixml/) — ML module system inspired by
45 | Scala/Odersky. Really like the look of this compared to OO-style mixin
46 | composition in Scala.
47 |
48 | My understanding is the ML-style modules (i.e. modules from SML and
49 | OCaml) use a limited form of dependent typing. i.e. they are like
50 | records/structs with type members (in addition to fun/val members). They
51 | are not first-class like they are in Scala but special functions which
52 | operate on modules called functors (not to be confused with
53 | fmap-Functors or Applicative Functors). These module functors are
54 | parameterised modules.
55 |
56 |
57 | ### Related
58 |
59 |
60 | #### [Bruno C. d. S. Oliveira][oliveira]
61 |
62 | [Type classes as objects and implicits][tcoi]
63 |
64 | Bruno Oliveira went on to write a paper about "implicits" with some
65 | other folks.
66 |
67 | [The Implicit Calculus: A New Foundation for Generic Programming](https://i.cs.hku.hk/~bruno/papers/pldi2012.pdf)
68 |
69 | The idea is to study the "implicits" as a separate language feature that
70 | should be considered by language designers, or in their words "This
71 | calculus isolates and formalizes the key ideas of Scala implicits and
72 | provides a simple model for language designers interested in developing
73 | similar mechanisms for their own languages.".
74 |
75 |
76 | #### [Martin Odersky][odersky]
77 |
78 | Odersky introduced implicit parameters to Scala in version 2.0.
79 | He explained how that gets you to "type classes" at this talk:
80 |
81 |
82 |
83 | and again (more formally) in 2010:
84 |
85 | [Type classes as objects and implicits][tcoi]
86 |
87 |
88 | #### [George Kuan][kuan]
89 |
90 | - [A True Higher-Order Module System](http://smlnj-gforge.cs.uchicago.edu/scm/viewvc.php/*checkout*/papers/hofsem/dissertation/kuan-dissertation.pdf?root=smlnj),
91 | George Kuan, Ph.D. Dissertation, University of Chicago, 2010.
92 | - [LinkedIn profile](http://www.linkedin.com/pub/george-kuan/6/672/324)
93 |
94 | ### Modular type classes show-stopper?
95 |
96 |
97 |
98 |
99 |
100 | "In contrast,
101 | since the type of x is universally quantified, the canonical instance of
102 | Num a **must** be determined dynamically (i.e. passed in as an
103 | argument)."
104 |
105 |
106 | ### Modular type classes and deriving
107 |
108 | - [_Practical Generic Programming with OCaml_](http://research.microsoft.com/en-us/um/people/crusso/ml2007/slides/yallop-ml07.pdf)
109 | by Jeremy Yallop, LFCS, University of Edinburgh, ML Workshop 2007.
110 |
111 |
112 | ### Orphan instances
113 |
114 | It seems that Haskell's Type Classes **do** find instances by linking
115 | only. i.e. instances are automatically exported/imported from the
116 | defining module (+ any recursively imported modules when importing).
117 |
118 |
119 |
120 | "Partial Revelation feature of Modula-3 which causes similar problems
121 | like Haskell's type class instances" Link to partial Revelation is
122 | broken. This might be a good substitute
123 |
124 |
125 | IMO this is much better solved with "normal" scoping rules (including
126 | implicit definitions).
127 |
128 | [dreyer]: http://www.mpi-sws.org/~dreyer/
129 | [harper]: https://www.cs.cmu.edu/~rwh/
130 | [chak]: http://justtesting.org/
131 | [wehr]: http://www.stefanwehr.de/
132 | [skilpat]: http://www.mpi-sws.org/~skilpat/
133 | [oliveira]: https://i.cs.hku.hk/~bruno/
134 | [odersky]: https://lampwww.epfl.ch/~odersky/
135 | [kuan]: https://people.cs.uchicago.edu/~gkuan/
136 | [tcoi]: https://i.cs.hku.hk/~bruno/papers/TypeClasses.pdf
137 |
--------------------------------------------------------------------------------
/params.json:
--------------------------------------------------------------------------------
1 | {"name":"PLT","tagline":"A path to Programming Language Theory enlightenment","body":"### Welcome to GitHub Pages.\r\nThis automatic page generator is the easiest way to create beautiful pages for all of your projects. Author your page content here using GitHub Flavored Markdown, select a template crafted by a designer, and publish. After your page is generated, you can check out the new branch:\r\n\r\n```\r\n$ cd your_repo_root/repo_name\r\n$ git fetch origin\r\n$ git checkout gh-pages\r\n```\r\n\r\nIf you're using the GitHub for Mac, simply sync your repository and you'll see the new branch.\r\n\r\n### Designer Templates\r\nWe've crafted some handsome templates for you to use. Go ahead and continue to layouts to browse through them. You can easily go back to edit your page before publishing. After publishing your page, you can revisit the page generator and switch to another theme. Your Page content will be preserved if it remained markdown format.\r\n\r\n### Rather Drive Stick?\r\nIf you prefer to not use the automatic generator, push a branch named `gh-pages` to your repository to create a page manually. In addition to supporting regular HTML content, GitHub Pages support Jekyll, a simple, blog aware static site generator written by our own Tom Preston-Werner. Jekyll makes it easy to create site-wide headers and footers without having to copy them across every page. It also offers intelligent blog support and other advanced templating features.\r\n\r\n### Authors and Contributors\r\nYou can @mention a GitHub username to generate a link to their profile. The resulting `` element will link to the contributor's GitHub Profile. For example: In 2007, Chris Wanstrath (@defunkt), PJ Hyett (@pjhyett), and Tom Preston-Werner (@mojombo) founded GitHub.\r\n\r\n### Support or Contact\r\nHaving trouble with Pages? Check out the documentation at https://help.github.com/pages or contact support@github.com and we’ll help you sort it out.\r\n","google":"UA-62781857-1","note":"Don't delete this file! It's used internally to help with page regeneration."}
--------------------------------------------------------------------------------
/stylesheets/github-light.css:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright 2014 GitHub Inc.
3 |
4 | Licensed under the Apache License, Version 2.0 (the "License");
5 | you may not use this file except in compliance with the License.
6 | You may obtain a copy of the License at
7 |
8 | http://www.apache.org/licenses/LICENSE-2.0
9 |
10 | Unless required by applicable law or agreed to in writing, software
11 | distributed under the License is distributed on an "AS IS" BASIS,
12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | See the License for the specific language governing permissions and
14 | limitations under the License.
15 |
16 | */
17 |
18 | .pl-c /* comment */ {
19 | color: #969896;
20 | }
21 |
22 | .pl-c1 /* constant, markup.raw, meta.diff.header, meta.module-reference, meta.property-name, support, support.constant, support.variable, variable.other.constant */,
23 | .pl-s .pl-v /* string variable */ {
24 | color: #0086b3;
25 | }
26 |
27 | .pl-e /* entity */,
28 | .pl-en /* entity.name */ {
29 | color: #795da3;
30 | }
31 |
32 | .pl-s .pl-s1 /* string source */,
33 | .pl-smi /* storage.modifier.import, storage.modifier.package, storage.type.java, variable.other, variable.parameter.function */ {
34 | color: #333;
35 | }
36 |
37 | .pl-ent /* entity.name.tag */ {
38 | color: #63a35c;
39 | }
40 |
41 | .pl-k /* keyword, storage, storage.type */ {
42 | color: #a71d5d;
43 | }
44 |
45 | .pl-pds /* punctuation.definition.string, string.regexp.character-class */,
46 | .pl-s /* string */,
47 | .pl-s .pl-pse .pl-s1 /* string punctuation.section.embedded source */,
48 | .pl-sr /* string.regexp */,
49 | .pl-sr .pl-cce /* string.regexp constant.character.escape */,
50 | .pl-sr .pl-sra /* string.regexp string.regexp.arbitrary-repitition */,
51 | .pl-sr .pl-sre /* string.regexp source.ruby.embedded */ {
52 | color: #183691;
53 | }
54 |
55 | .pl-v /* variable */ {
56 | color: #ed6a43;
57 | }
58 |
59 | .pl-id /* invalid.deprecated */ {
60 | color: #b52a1d;
61 | }
62 |
63 | .pl-ii /* invalid.illegal */ {
64 | background-color: #b52a1d;
65 | color: #f8f8f8;
66 | }
67 |
68 | .pl-sr .pl-cce /* string.regexp constant.character.escape */ {
69 | color: #63a35c;
70 | font-weight: bold;
71 | }
72 |
73 | .pl-ml /* markup.list */ {
74 | color: #693a17;
75 | }
76 |
77 | .pl-mh /* markup.heading */,
78 | .pl-mh .pl-en /* markup.heading entity.name */,
79 | .pl-ms /* meta.separator */ {
80 | color: #1d3e81;
81 | font-weight: bold;
82 | }
83 |
84 | .pl-mq /* markup.quote */ {
85 | color: #008080;
86 | }
87 |
88 | .pl-mi /* markup.italic */ {
89 | color: #333;
90 | font-style: italic;
91 | }
92 |
93 | .pl-mb /* markup.bold */ {
94 | color: #333;
95 | font-weight: bold;
96 | }
97 |
98 | .pl-md /* markup.deleted, meta.diff.header.from-file */ {
99 | background-color: #ffecec;
100 | color: #bd2c00;
101 | }
102 |
103 | .pl-mi1 /* markup.inserted, meta.diff.header.to-file */ {
104 | background-color: #eaffea;
105 | color: #55a532;
106 | }
107 |
108 | .pl-mdr /* meta.diff.range */ {
109 | color: #795da3;
110 | font-weight: bold;
111 | }
112 |
113 | .pl-mo /* meta.output */ {
114 | color: #1d3e81;
115 | }
116 |
--------------------------------------------------------------------------------
/stylesheets/styles.css:
--------------------------------------------------------------------------------
1 | @import url(https://fonts.googleapis.com/css?family=Arvo:400,700,400italic);
2 |
3 | /* MeyerWeb Reset */
4 |
5 | html, body, div, span, applet, object, iframe,
6 | h1, h2, h3, h4, h5, h6, p, blockquote, pre,
7 | a, abbr, acronym, address, big, cite, code,
8 | del, dfn, em, img, ins, kbd, q, s, samp,
9 | small, strike, strong, sub, sup, tt, var,
10 | b, u, i, center,
11 | dl, dt, dd, ol, ul, li,
12 | fieldset, form, label, legend,
13 | table, caption, tbody, tfoot, thead, tr, th, td,
14 | article, aside, canvas, details, embed,
15 | figure, figcaption, footer, header, hgroup,
16 | menu, nav, output, ruby, section, summary,
17 | time, mark, audio, video {
18 | margin: 0;
19 | padding: 0;
20 | border: 0;
21 | font: inherit;
22 | vertical-align: baseline;
23 | }
24 |
25 |
26 | /* Base text styles */
27 |
28 | body {
29 | padding:10px 50px 0 0;
30 | font-family:"Helvetica Neue", Helvetica, Arial, sans-serif;
31 | font-weight: normal;
32 | font-size: 13pt;
33 | color: #232323;
34 | background-color: #FBFAF7;
35 | margin: 0;
36 | line-height: 1.8em;
37 | -webkit-font-smoothing: antialiased;
38 | }
39 |
40 | h1, h2, h3, h4, h5, h6 {
41 | color:#232323;
42 | margin:36px 0 10px;
43 | }
44 |
45 | p, ul, ol, table, dl {
46 | margin:0 0 22px;
47 | }
48 |
49 | h1, h2, h3 {
50 | font-family: Arvo, Monaco, serif;
51 | line-height:1.3;
52 | font-weight: normal;
53 | }
54 |
55 | h1,h2, h3 {
56 | display: block;
57 | border-bottom: 1px solid #ccc;
58 | padding-bottom: 5px;
59 | }
60 |
61 | h1 {
62 | font-size: 30px;
63 | }
64 |
65 | h2 {
66 | font-size: 24px;
67 | }
68 |
69 | h3 {
70 | font-size: 18px;
71 | }
72 |
73 | h4, h5, h6 {
74 | font-family: Arvo, Monaco, serif;
75 | font-weight: 700;
76 | }
77 |
78 | a {
79 | color:#C30000;
80 | font-weight:200;
81 | text-decoration:none;
82 | }
83 |
84 | a:hover {
85 | text-decoration: underline;
86 | }
87 |
88 | a small {
89 | font-size: 12px;
90 | }
91 |
92 | em {
93 | font-style: italic;
94 | }
95 |
96 | strong {
97 | font-weight:700;
98 | }
99 |
100 | ul {
101 | list-style-position: inside;
102 | list-style: disc;
103 | padding-left: 25px;
104 | }
105 |
106 | ol {
107 | list-style-position: inside;
108 | list-style: decimal;
109 | padding-left: 25px;
110 | }
111 |
112 | blockquote {
113 | margin: 0;
114 | padding: 0 0 0 20px;
115 | font-style: italic;
116 | }
117 |
118 | dl, dt, dd, dl p {
119 | font-color: #444;
120 | }
121 |
122 | dl dt {
123 | font-weight: bold;
124 | }
125 |
126 | dl dd {
127 | padding-left: 20px;
128 | font-style: italic;
129 | }
130 |
131 | dl p {
132 | padding-left: 20px;
133 | font-style: italic;
134 | }
135 |
136 | hr {
137 | border:0;
138 | background:#ccc;
139 | height:1px;
140 | margin:0 0 24px;
141 | }
142 |
143 | /* Images */
144 |
145 | img {
146 | position: relative;
147 | margin: 0 auto;
148 | max-width: 650px;
149 | padding: 5px;
150 | margin: 10px 0 32px 0;
151 | border: 1px solid #ccc;
152 | }
153 |
154 | p img {
155 | display: inline;
156 | margin: 0;
157 | padding: 0;
158 | vertical-align: middle;
159 | text-align: center;
160 | border: none;
161 | }
162 |
163 | /* Code blocks */
164 |
165 | code, pre {
166 | font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal, monospace;
167 | color:#000;
168 | font-size:14px;
169 | }
170 |
171 | pre {
172 | padding: 4px 12px;
173 | background: #FDFEFB;
174 | border-radius:4px;
175 | border:1px solid #D7D8C8;
176 | overflow: auto;
177 | overflow-y: hidden;
178 | margin-bottom: 32px;
179 | }
180 |
181 |
182 | /* Tables */
183 |
184 | table {
185 | width:100%;
186 | }
187 |
188 | table {
189 | border: 1px solid #ccc;
190 | margin-bottom: 32px;
191 | text-align: left;
192 | }
193 |
194 | th {
195 | font-family: 'Arvo', Helvetica, Arial, sans-serif;
196 | font-size: 18px;
197 | font-weight: normal;
198 | padding: 10px;
199 | background: #232323;
200 | color: #FDFEFB;
201 | }
202 |
203 | td {
204 | padding: 10px;
205 | background: #ccc;
206 | }
207 |
208 |
209 | /* Wrapper */
210 | .wrapper {
211 | width:960px;
212 | }
213 |
214 |
215 | /* Header */
216 |
217 | header {
218 | background-color: #171717;
219 | color: #FDFDFB;
220 | width:170px;
221 | float:left;
222 | position:fixed;
223 | border: 1px solid #000;
224 | -webkit-border-top-right-radius: 4px;
225 | -webkit-border-bottom-right-radius: 4px;
226 | -moz-border-radius-topright: 4px;
227 | -moz-border-radius-bottomright: 4px;
228 | border-top-right-radius: 4px;
229 | border-bottom-right-radius: 4px;
230 | padding: 34px 25px 22px 50px;
231 | margin: 30px 25px 0 0;
232 | -webkit-font-smoothing: antialiased;
233 | font-weight: 14px;
234 | }
235 |
236 | h1.header {
237 | font-family: Arvo, sans-serif;
238 | font-size: 30px;
239 | font-weight: 300;
240 | line-height: 1.3em;
241 | border-bottom: none;
242 | margin-top: 0;
243 | }
244 |
245 |
246 | h1.header, a.header, a.name, header a {
247 | color: #fff;
248 | font-weight: 500;
249 | }
250 |
251 | a.header {
252 | font-weight: 500;
253 | }
254 |
255 | a.name {
256 | white-space: nowrap;
257 | }
258 |
259 | header ul {
260 | list-style:none;
261 | padding:0;
262 | }
263 |
264 | header li {
265 | list-style-type: none;
266 | width:132px;
267 | height:15px;
268 | margin-bottom: 12px;
269 | line-height: 1em;
270 | padding: 6px 6px 6px 7px;
271 |
272 | background: #AF0011;
273 | background: -moz-linear-gradient(top, #AF0011 0%, #820011 100%);
274 | background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f8f8f8), color-stop(100%,#dddddd));
275 | background: -webkit-linear-gradient(top, #AF0011 0%,#820011 100%);
276 | background: -o-linear-gradient(top, #AF0011 0%,#820011 100%);
277 | background: -ms-linear-gradient(top, #AF0011 0%,#820011 100%);
278 | background: linear-gradient(top, #AF0011 0%,#820011 100%);
279 |
280 | border-radius:4px;
281 | border:1px solid #0D0D0D;
282 |
283 | -webkit-box-shadow: inset 0px 1px 1px 0 rgba(233,2,38, 1);
284 | box-shadow: inset 0px 1px 1px 0 rgba(233,2,38, 1);
285 |
286 | }
287 |
288 | header li:hover {
289 | background: #C3001D;
290 | background: -moz-linear-gradient(top, #C3001D 0%, #950119 100%);
291 | background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f8f8f8), color-stop(100%,#dddddd));
292 | background: -webkit-linear-gradient(top, #C3001D 0%,#950119 100%);
293 | background: -o-linear-gradient(top, #C3001D 0%,#950119 100%);
294 | background: -ms-linear-gradient(top, #C3001D 0%,#950119 100%);
295 | background: linear-gradient(top, #C3001D 0%,#950119 100%);
296 | }
297 |
298 | a.buttons {
299 | -webkit-font-smoothing: antialiased;
300 | background: url(../images/arrow-down.png) no-repeat;
301 | font-weight: normal;
302 | text-shadow: rgba(0, 0, 0, 0.4) 0 -1px 0;
303 | padding: 2px 2px 2px 22px;
304 | height: 30px;
305 | }
306 |
307 | ul.github li {
308 | padding-bottom: 10px; /* FIX: Sigh, random pixels makes it looks right… */
309 | }
310 |
311 | a.github {
312 | background: url(../images/octocat-small.png) no-repeat 1px;
313 | font-size: 14px;
314 | }
315 |
316 | a.buttons:hover {
317 | color: #fff;
318 | text-decoration: none;
319 | }
320 |
321 |
322 | /* Section - for main page content */
323 |
324 | section {
325 | width:650px;
326 | float:right;
327 | padding-bottom:50px;
328 | }
329 |
330 |
331 | /* Footer */
332 |
333 | footer {
334 | width:170px;
335 | float:left;
336 | position:fixed;
337 | bottom:10px;
338 | padding-left: 50px;
339 | }
340 |
341 | @media print, screen and (max-width: 960px) {
342 |
343 | div.wrapper {
344 | width:auto;
345 | margin:0;
346 | }
347 |
348 | header, section, footer {
349 | float:none;
350 | position:static;
351 | width:auto;
352 | }
353 |
354 | footer {
355 | border-top: 1px solid #ccc;
356 | margin:0 84px 0 50px;
357 | padding:0;
358 | }
359 |
360 | header {
361 | padding-right:320px;
362 | }
363 |
364 | section {
365 | padding:20px 84px 20px 50px;
366 | margin:0 0 20px;
367 | }
368 |
369 | header a small {
370 | display:inline;
371 | }
372 |
373 | header ul {
374 | position:absolute;
375 | right:130px;
376 | top:84px;
377 | }
378 | }
379 |
380 | @media print, screen and (max-width: 720px) {
381 | body {
382 | word-wrap:break-word;
383 | }
384 |
385 | header {
386 | padding:10px 20px 0;
387 | margin-right: 0;
388 | }
389 |
390 | section {
391 | padding:10px 0 10px 20px;
392 | margin:0 0 30px;
393 | }
394 |
395 | footer {
396 | margin: 0 0 0 30px;
397 | }
398 |
399 | header ul, header p.view {
400 | position:static;
401 | }
402 | }
403 |
404 | @media print, screen and (max-width: 480px) {
405 |
406 | header ul li.download {
407 | display:none;
408 | }
409 |
410 | footer {
411 | margin: 0 0 0 20px;
412 | }
413 |
414 | footer a{
415 | display:block;
416 | }
417 |
418 | }
419 |
420 | @media print {
421 | body {
422 | padding: 0.4in;
423 | font-size: 12pt;
424 | color: #444;
425 | }
426 | }
427 |
--------------------------------------------------------------------------------