├── .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 |

PLT

27 |

Programming Language Theory

28 | 29 | 32 | 33 |

Maintained by 34 | 35 | Steven Shaw 36 | and contributors 37 |

38 | 39 | 40 |
41 |
42 | {{ content }} 43 |
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 | --------------------------------------------------------------------------------