├── .gitignore ├── Makefile ├── README.md ├── build.lhs ├── language.dvi ├── language.pdf ├── language.src ├── refs.bib └── updates.txt /.gitignore: -------------------------------------------------------------------------------- 1 | language.aux 2 | language.bbl 3 | language.blg 4 | language.ilg 5 | language.ind 6 | language.log 7 | language.pdf 8 | language.tex 9 | language.toc 10 | prelude.lhb 11 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | 2 | .SUFFIXES: .pdf .src .tex .lhb .idx .ind .bib .bbl 3 | .PHONY: all clean 4 | 5 | all: language.pdf 6 | 7 | language.pdf: language.tex language.ind language.bbl 8 | 9 | language.tex: language.src 10 | runhugs build.lhs 11 | 12 | .tex.pdf: 13 | pdflatex $* 14 | 15 | .idx.ind: 16 | makeindex $* 17 | 18 | .idx.bbl: 19 | bibtex $* 20 | 21 | .tex.idx: 22 | pdflatex $* 23 | 24 | clean : 25 | -rm *.blg *.bbl *.pdf *.log \ 26 | *.ind *.ilg *.idx *.aux 27 | 28 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # language-report 2 | LaTeX sources for the Habit Programming Language Report 3 | -------------------------------------------------------------------------------- /build.lhs: -------------------------------------------------------------------------------- 1 | #! runhaskell 2 | 3 | This file contains code for extracting language.tex and prelude.lhb 4 | from the language report sources in language.src. 5 | 6 | > import Data.Char 7 | > import System.IO 8 | 9 | > main = do "language.src" `toLatex` "language.tex" 10 | > "language.src" `toCode` "prelude.lhb" 11 | 12 | How do we classify lines in the input file? 13 | 14 | > data Line = Lit String | Code String | Blank | Text String 15 | 16 | Lines beginning with "> " or with ">" followed only by spaces are Literate 17 | lines that will appear in both LaTeX output (without the "> " prefix) and 18 | code (with the ">" prefix). 19 | 20 | Any other lines that begin with ">" are Code lines that are ignored in 21 | LaTeX output, but appear in some form in the code. Specifically, a line 22 | beginning ">>" is treated in code like a line beginning with "> "; a 23 | line beginning with ">:" is copied to the code output without the ">:" 24 | prefix; and any other line is copied to the code output without the 25 | ">" prefix. 26 | 27 | As such, ">>" and ">:" can be used to create blank lines that appear 28 | only in the code file, the former including a ">" prefix, the latter 29 | without. 30 | 31 | > classify :: String -> Line 32 | > classify ('>':' ': s) = Lit s 33 | > classify ('>':s) 34 | > | all isSpace s = Lit s 35 | > | otherwise = Code s 36 | > classify s | all isSpace s = Blank 37 | > | otherwise = Text s 38 | 39 | How do we process a file? 40 | 41 | > type Out = String -> IO () 42 | 43 | > process :: (Out -> [Line] -> IO ()) -> String -> String -> IO () 44 | > process pro inf outf 45 | > = do src <- readFile inf 46 | > h <- openFile outf WriteMode 47 | > pro (hPutStrLn h) (map classify (lines src)) 48 | > hClose h 49 | 50 | What are the specifics for generating a LaTeX file? 51 | 52 | > toLatex :: String -> String -> IO () 53 | > toLatex = process latexSM 54 | 55 | > latexSM :: Out -> [Line] -> IO () 56 | > latexSM out = intext 57 | > where 58 | > -- functions for producing output: 59 | > text s = out s 60 | > begin = out "\\begin{Verbatim}" 61 | > end = out "\\end{Verbatim}" 62 | > blank = out "" 63 | > lit s = out s 64 | 65 | > -- in regular text: 66 | > intext [] = return () 67 | > intext (Text s : ls) = text s >> intext ls 68 | > intext (Blank : ls) = textblank ls 69 | > intext (Lit s : ls) = begin >> lit s >> incode ls 70 | > intext (Code s : ls) = intext ls 71 | 72 | > -- blanks appearing in text: 73 | > textblank [] = blank 74 | > textblank (Text s : ls) = blank >> text s >> intext ls 75 | > textblank (Blank : ls) = blank >> textblank ls 76 | > textblank (Lit s : ls) = begin >> lit s >> incode ls 77 | > textblank (Code s : ls) = textblank ls 78 | 79 | > -- in code lines: 80 | > incode [] = end 81 | > incode (Text s : ls) = end >> text s >> intext ls 82 | > incode (Blank : ls) = codeblank ls 83 | > incode (Lit s : ls) = lit s >> incode ls 84 | > incode (Code s : ls) = incode ls 85 | 86 | > -- blanks appearing in code: 87 | > codeblank [] = end 88 | > codeblank (Text s : ls) = end >> text s >> intext ls 89 | > codeblank (Blank : ls) = end >> blank >> intext ls 90 | > codeblank (Lit s : ls) = blank >> lit s >> incode ls 91 | > codeblank (Code s : ls) = codeblank ls 92 | 93 | The state machine described by the code above ignores Code lines 94 | completely, as if they had been filtered out of the input stream 95 | in the first place. 96 | 97 | > toCode :: String -> String -> IO () 98 | > toCode = process codeSM 99 | 100 | > codeSM :: Out -> [Line] -> IO () 101 | > codeSM out = intext 102 | > where 103 | > -- functions for producing output: 104 | > blank = out "" 105 | > lit s = out ('>' : ' ' : s) 106 | > code ('>':s) = lit s 107 | > code (':':s) = out s 108 | > code other = out other 109 | 110 | > -- in regular text: 111 | > intext [] = return () 112 | > intext (Text s : ls) = intext ls 113 | > intext (Blank : ls) = textblank ls 114 | > intext (Lit s : ls) = lit s >> incode ls 115 | > intext (Code s : ls) = code s >> incode ls 116 | 117 | > -- blanks appearing in text: 118 | > textblank [] = return () 119 | > textblank (Text s : ls) = intext ls 120 | > textblank (Blank : ls) = textblank ls 121 | > textblank (Lit s : ls) = blank >> lit s >> incode ls 122 | > textblank (Code s : ls) = blank >> code s >> incode ls 123 | 124 | > -- in code lines: 125 | > incode [] = return () 126 | > incode (Text s : ls) = blank >> intext ls 127 | > incode (Blank : ls) = codeblank ls 128 | > incode (Lit s : ls) = lit s >> incode ls 129 | > incode (Code s : ls) = code s >> incode ls 130 | 131 | > -- blanks appearing in code: 132 | > codeblank [] = return () 133 | > codeblank (Text s : ls) = intext ls 134 | > codeblank (Blank : ls) = codeblank ls 135 | > codeblank (Lit s : ls) = blank >> lit s >> incode ls 136 | > codeblank (Code s : ls) = blank >> code s >> incode ls 137 | -------------------------------------------------------------------------------- /language.dvi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/habit-lang/language-report/22c0a76aa1d57adb29bed7ea2b1cec65269e2e9c/language.dvi -------------------------------------------------------------------------------- /language.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/habit-lang/language-report/22c0a76aa1d57adb29bed7ea2b1cec65269e2e9c/language.pdf -------------------------------------------------------------------------------- /refs.bib: -------------------------------------------------------------------------------- 1 | @techreport{Habit, 2 | title = "{The Habit Programming Language: The Revised Preliminary Report}", 3 | author = "{The High Assurance Systems Programming Project (Hasp)}", 4 | institution = "{Department of Computer Science, Portland State University, Portland, Oregon, USA}", 5 | month = "November", 6 | year = "2010" 7 | } 8 | 9 | @techreport{Fidget, 10 | title = "{The Fidget Intermediate Language}", 11 | author = "{Tim Chevalier and Caylee Hogg}", 12 | institution = "{Department of Computer Science, Portland State University, Portland, Oregon, USA}", 13 | month = "November", 14 | year = "2010" 15 | } 16 | 17 | @techreport{DictFree, 18 | author = "Mark Jones", 19 | title = "Dictionary-free Overloading by Partial Evaluation", 20 | institution = "{Department of Computer Science, Yale University}", 21 | number = "{YALEU/DCS/RR-959}", 22 | month = "April", 23 | year = "1993" 24 | } 25 | 26 | @inproceedings{GCMinor, 27 | author = "McCreight, Andrew and Chevalier, Tim and Tolmach, Andrew", 28 | title = "A Certified Framework for Compiling and Executing 29 | Garbage-collected Languages", 30 | booktitle = "{Proceedings of ICFP 2010, the 15th ACM SIGPLAN International 31 | Conference on Functional Programming}", 32 | address = "{Baltimore, MD}", 33 | month = "September", 34 | year = "2010" 35 | } 36 | 37 | @article{CompCert, 38 | author = {Xavier Leroy}, 39 | title = {Formal verification of a realistic compiler}, 40 | journal = {Communications of the ACM}, 41 | year = 2009, 42 | volume = 52, 43 | number = 7, 44 | pages = {107--115} 45 | } 46 | 47 | @inproceedings{EssenceML, 48 | title = "The essence of {ML}", 49 | author = "Mitchell, J. C. and Harper, R.", 50 | booktitle = "{Proceedings of the 15th ACM SIGPLAN-SIGACT symposium on Principles 51 | of programming languages (POPL '88)}", 52 | month = "January", 53 | year = "1988" 54 | } 55 | 56 | @misc{hOp, 57 | title = "{hOp}", 58 | author = "S\'{e}bastian Carlier and J\'{e}r\'{e}my Bobbio", 59 | howpublished ="\url{http://etudiants.insia.org/~jbobbio/hOp/}", 60 | year = "2004" 61 | } 62 | 63 | @misc{Kauer, 64 | author = "Bernhard Kauer", 65 | title = "{L4.sec Implementation - Kernel Memory Management}", 66 | howpublished = "{Diploma Thesis, Dresden University of Technology}", 67 | month = "May", 68 | year = "2005" 69 | } 70 | 71 | @inproceedings{Haeberlen, 72 | author = "Andreas Haeberlen and Kevin Elphinstone", 73 | title = "User-level Management of Kernel Memory", 74 | booktitle = "{Proceedings of the Eighth Asia-Pacific Computer Systems 75 | Architecture Conference (ACSAC'03)}", 76 | address = "{Aizu-Wakamatsu City, Japan}", 77 | month = "September", 78 | year = "2003" 79 | } 80 | 81 | @inproceedings{Elkaduwe, 82 | author = "Dhammika Elkaduwe and Philip Derrin and Kevin Elphinstone", 83 | title = "A memory allocation model for an embedded microkernel", 84 | booktitle = "Proceedings of the 1st International Workshop on Microkernels 85 | for Embedded Systems", 86 | address = "{Sydney, Australia}", 87 | month = "January", 88 | year = "2007" 89 | } 90 | 91 | @phdthesis{DiatchkiPhD, 92 | author = {Iavor Sotirov Diatchki}, 93 | title = {High-Level Abstractions for Low-Level Programming}, 94 | month = {May}, 95 | year = {2007}, 96 | school = {OGI School of Science \& Engineering at Oregon Health \& Science University} 97 | } 98 | 99 | @inproceedings{memory_areas, 100 | title = "{Strongly Typed Memory Areas}", 101 | author = {Iavor S. Diatchki and Mark P. Jones}, 102 | booktitle = "{Proceedings of ACM SIGPLAN 2006 Haskell Workshop}", 103 | pages = "72--83", 104 | month = "September", 105 | year = "2006", 106 | address = "Portland, Oregon" 107 | } 108 | 109 | @misc{MLton, 110 | title = "{Whole-Program Compilation in MLton}", 111 | author = "Stephen Weeks", 112 | howpublished = "Invited talk for the 2006 wokshop on {ML}. \url{http://mlton.org/}, date viewed: 25 April 2007" 113 | } 114 | 115 | @inproceedings{Cayenne, 116 | title = "{Cayenne--A Language With Dependent Types}", 117 | author = "Lennart Augustsson", 118 | booktitle = "{Proceedings of the Third ACM SIGPLAN International Conference on Functional Programming}", 119 | pages = "239--250", 120 | month = "September", 121 | year = "1998", 122 | address = "{Baltimore, MD, USA}" 123 | } 124 | 125 | @book{Coq, 126 | title = "{Interactive Theorem Proving and Program Development}", 127 | author = "Yves Bertot and Pierre Cast{\'e}ran", 128 | year = "2004", 129 | publisher = "Springer-Verlag" 130 | } 131 | 132 | @book{tiger_book, 133 | title = "{Modern Compiler Implementation in ML}", 134 | author = "Andrew W. Appel", 135 | year = "1998", 136 | publisher = "Cambridge University Press" 137 | } 138 | 139 | @techreport{marius, 140 | title = "{A Theory of Implementation-Dependent Low-Level Software}", 141 | author = "Marius Nita and Dan Grossman and Craig Chambers", 142 | month = "October", 143 | year = "2006", 144 | number = "{UW-CSE Technical Report 2006-10-01}", 145 | institution = "{University of Washington}" 146 | } 147 | 148 | @manual{C99, 149 | title = "{C99 Specification with TC1 and TC2}", 150 | author = "{C99 Committee}", 151 | month = "May", 152 | year = "2005", 153 | note = "\url{http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1124.pdf}, date viewed: 25 April 2007." 154 | } 155 | 156 | @manual{clean, 157 | title = "{The Concurrent Clean Language Report}", 158 | author = "Rinus Plasmeijer and Marko van Eekelen", 159 | month = "December", 160 | year = "2001", 161 | note = "\url{http://clean.cs.ru.nl/}, date viewed: 25 April 2007" 162 | } 163 | 164 | @inproceedings{launchbury94lazy, 165 | title = "{Lazy Functional State Threads}", 166 | author = "John Launchbury and Simon {Peyton Jones}", 167 | booktitle = "{Proceedings of the ACM SIGPLAN Conference on Programming Language Design and Implementation}", 168 | pages = "24--35", 169 | month = "June", 170 | year = "1994", 171 | address = "{Orlando, FL, USA}" 172 | } 173 | 174 | @inproceedings{TAL, 175 | title = "{TALx86: A Realistic Typed Assembly Language}", 176 | author = "Greg Morrisett and Karl Crary and Neal Glew and Dan Grossman and Richard Samuels and Frederick Smith and David Walker and Stephanie Weirich and Steve Zdancewic", 177 | booktitle = "Proceedings of the ACM SIGPLAN Workshop on Compiler Support for System Software", 178 | pages = "25--35", 179 | month = "May", 180 | year = "1999", 181 | address = "{Atlanta, GA, USA}" 182 | } 183 | 184 | @article{Laufer94, 185 | title = "{Polymorphic Type Inference and Abstract Data Types}", 186 | author = "Konstantin L{\"a}ufer and Martin Odersky", 187 | journal = "ACM Transactions on Programming Languages and Systems", 188 | volume = "16", 189 | number = "5", 190 | year = "1994", 191 | pages = "1411--1430", 192 | } 193 | 194 | 195 | @article{Mitchell88, 196 | title = "{Abstract Types Have Existential Type}", 197 | author = "John C. Mitchell and Gordon D. Plotkin", 198 | journal = "{ACM Transactions on Programming Languages and Systems}", 199 | pages = "470--502", 200 | month = "July", 201 | year = "1988", 202 | volume = "10", 203 | number = "3" 204 | } 205 | 206 | @book{lambda-calculus, 207 | title = "{The Lambda Calculus: Its Syntax and Semantics}", 208 | author = "Henk Barendregt", 209 | year = "1997", 210 | publisher = "Elsevier" 211 | } 212 | 213 | @article{Barendregt91, 214 | title = "{Introduction to Generalized Type Systems}", 215 | author = "Henk Barendregt", 216 | journal = "Journal of Functional Programming", 217 | volume = "1", 218 | number = "2", 219 | pages = "125--154", 220 | month = "April", 221 | year = "1991" 222 | } 223 | 224 | @article{Cardelli85, 225 | title = "{On Understanding Types, Data Abstraction, and Polymorphism}", 226 | author = "Luca Cardelli and Peter Wegner", 227 | journal = "ACM Computing Surveys", 228 | pages = "471--522", 229 | volume = 17, 230 | number = 4, 231 | month = "December", 232 | year = 1985 233 | } 234 | 235 | @manual{PCI, 236 | title = "{PCI Local Bus Specification}", 237 | organization = "{PCI Special Interest Group}", 238 | month = "June", 239 | year = "1995", 240 | note = "\url{http://www.pcisig.com/specifications/conventional}, date viewed: 25 April 2007" 241 | } 242 | 243 | @book{SML, 244 | title = "{The Definition of Standard ML---Revised}", 245 | author = "Robin Milner and Mads Tofte and Robert Harper and David MacQueen", 246 | month = "May", 247 | year = "1997", 248 | publisher = "MIT Press" 249 | } 250 | 251 | @misc{gcc, 252 | title = "{GCC, the GNU Compiler Collection}", 253 | author = "The GCC Team", 254 | howpublished = "\url{http://gcc.gnu.org}, date viewed: 25 April 2007", 255 | year = "2007" 256 | } 257 | 258 | @misc{UNIX, 259 | title = "{The Creation of the UNIX* Operating System}", 260 | author = "{Bell Labs}", 261 | howpublished = "\url{http://www.bell-labs.com/history/unix}, date viewed: 25 April 2007.", 262 | } 263 | 264 | 265 | @book{ASN1, 266 | title = "{ASN.1---Communication Between Heterogeneous Systems}", 267 | author = "Olivier Dubuisson", 268 | month = "September", 269 | year = "2000", 270 | publisher = "Morgan Kaufmann Publishers", 271 | isbn = "0126333361-0" 272 | } 273 | 274 | @inproceedings{ArrayBound98, 275 | title = "{Eliminating Array Bound Checking through Dependent Types}", 276 | author = "Hongwei Xi and Frank Pfenning", 277 | booktitle = "Proceedings of ACM SIGPLAN Conference on Programming Language Design and Implementation", 278 | pages = "249--257", 279 | month = "June", 280 | year = "1998", 281 | address = "{Montreal, Canada}", 282 | } 283 | 284 | @phdthesis{XiPhD, 285 | author = {Hongwei Xi}, 286 | title = {Dependent Types in Practical Programming}, 287 | month = {September}, 288 | year = {1998}, 289 | school = {Carnegie Mellon University} 290 | } 291 | 292 | 293 | 294 | @phdthesis{ParetoPhD, 295 | author = {Lars Pareto}, 296 | title = {Types for Crash Prevention}, 297 | year = {2000}, 298 | school = {Chalmers University of Technology and G{\"o}teborg University} 299 | } 300 | 301 | @techreport{singularity-overview, 302 | title = "{An Overview of the Singularity Project}", 303 | author = "Glen C. Hunt and James R. Larus and Martin Abadi and Mark Aiken and Paul Barham and Manuel Fahndrich and Chris Hawblitzel and Orion Hodson and Steven Levi and Nick Murphy and Bjarne Steensgaard and David Tarditi and Ted Wobber and Brian D. Zill", 304 | month = "October", 305 | year = "2005", 306 | number = "{MSR-TR-2005-135}", 307 | institution = "{Microsoft Research}" 308 | } 309 | 310 | @article{singularity, 311 | title = {Singularity: rethinking the software stack}, 312 | author = {Galen C. Hunt and James R. Larus}, 313 | journal = {Operating Systems Review}, 314 | volume = {41}, 315 | number = {2}, 316 | year = {2007}, 317 | pages = {37-49}, 318 | } 319 | 320 | @inproceedings{wadler90linear, 321 | title = "{Linear Types Can Change the World!}", 322 | author = "Philip Wadler", 323 | booktitle = "{Working Conference on Programming Concepts and Methods}", 324 | pages = "347--359", 325 | year = "1990", 326 | address = "{Sea of Galilee, Israel}", 327 | } 328 | 329 | 330 | @inproceedings{Coyotos, 331 | title = "{Towards a Verified, General-Purpose Operating System Kernel}", 332 | author = "Jonathan Shapiro and Michael Scott Doerrie and Eric Northup and Swaroop Sridhar and Mark Miller", 333 | booktitle = "{NICTA FM Workshop on OS Verification}", 334 | pages = "1--19", 335 | year = "2004" 336 | } 337 | 338 | 339 | @inproceedings{next700, 340 | title = "{The Next 700 Data Description Languages}", 341 | author = "Kathleen Fisher and Yitzhak Mandelbaum and David Walker", 342 | booktitle = "Conference Record of the 33rd ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages", 343 | year = {2006}, 344 | pages = {2--15}, 345 | address = {Charleston, South Carolina, USA}, 346 | } 347 | 348 | 349 | @article{scheme, 350 | author = {H. Abelson and R. K. Dybvig and C. T. Haynes and G. J. Rozas and N. I. Adams Iv and D. P. Friedman and E. Kohlbecker and G. L. Steele, Jr. and D. H. Bartley and R. Halstead and D. Oxley and G. J. Sussman and G. Brooks and C. Hanson and K. M. Pitman and M. Wand}, 351 | title = "{Revised Report on the Algorithmic Language Scheme}", 352 | journal = "{Journal of Higher-Order and Symbolic Computation}", 353 | volume = "11", 354 | number = "1", 355 | month = "August", 356 | year = "1998", 357 | issn = "1388-3690", 358 | pages = "7--105", 359 | doi = "{http://dx.doi.org/10.1023/A:1010051815785}", 360 | } 361 | 362 | 363 | @inproceedings{erlang, 364 | author = "Joe Armstrong", 365 | title = "{Erlang---A Survey of the Language and Its Industrial Applications}", 366 | booktitle = "{Proceedings of the Ninth Symposium and Exhibition on Industrial Applications of Prolog}", 367 | address = "{Hino, Tokyo, Japan}", 368 | pages = "16--18", 369 | month = "October", 370 | year = "1996" 371 | } 372 | 373 | @inproceedings{Wallace98, 374 | title = "{The Bits Between the Lambdas: Binary Data in a Lazy Functional Language}", 375 | author = "Malcolm Wallace and Colin Runciman", 376 | booktitle = "{Proceedings of the First International Symposium on Memory Management}", 377 | year = "1998", 378 | pages = {107--117}, 379 | address = "{Vancouver, British Columbia, Canada}" 380 | } 381 | 382 | @inproceedings{NDL, 383 | title = "{NDL: A Domain-Specific Language for Device Drivers}", 384 | author = "Christopher L. Conway and Stephen A. Edwards", 385 | booktitle = "{Proceedings of the ACM SIGPLAN/SIGBED 2004 Conference on Languages, Compilers, and Tools for Embedded Systems}", 386 | pages = "30--36", 387 | month = "June", 388 | year = "2004", 389 | address = "{Washington, DC, USA}", 390 | doi = {http://doi.acm.org/10.1145/997163.997169}, 391 | } 392 | 393 | 394 | @phdthesis{WallacePhD, 395 | author = {Malcolm Wallace}, 396 | title = {Functional Programming and Embedded Systems}, 397 | year = {1995}, 398 | school = {University of York} 399 | } 400 | 401 | 402 | 403 | @inproceedings{wallace95, 404 | title = "{Lambdas in the Liftshaft: Functional Programming and an Embedded Architecture}", 405 | author = "Malcolm Wallace and Colin Runciman", 406 | booktitle = "{Proceedings of the Seventh International Conference on Functional Programming Languages and Computer Architecture}", 407 | year = "1995", 408 | pages = "249--258", 409 | address = "{La Jolla, CA, USA}" 410 | } 411 | 412 | @inproceedings{awkward-squad, 413 | title = "{Tackling the Awkward Squad: Monadic Input/Output, Concurrency, Exceptions, and Foreign-Language Calls in Haskell}", 414 | author = "Simon {Peyton Jones}", 415 | booktitle = "{Engineering Theories of Software Construction}", 416 | pages = "47--96", 417 | year = "2001", 418 | publisher = "IOS Press" 419 | } 420 | 421 | @inproceedings{Devil, 422 | title = "{Devil: An IDL for Hardware Programming}", 423 | author = "Fabrice Merillon and Laurent Reveillere and Charles Consel and Renaud Marlet and Gilles Muller", 424 | booktitle = "{Proceedings of the Fourth Symposium on Operating Systems Design and Implementation}", 425 | pages = "17-30", 426 | month = "October", 427 | year = "2000", 428 | address = "San Diego, CA, USA" 429 | } 430 | 431 | 432 | @inproceedings{Erlang-bits, 433 | title = "{Native Code Compilation of Erlang's Bit Syntax}", 434 | author = "Per Gustafsson and Konstantinos Sagonas", 435 | booktitle = "{Proceedings of the 2002 ACM SIGPLAN Workshop on Erlang}", 436 | month = "October", 437 | year = "2002", 438 | pages = "6--15", 439 | address = "{Pittsburgh, Pennsylvania}", 440 | doi = "http://doi.acm.org/10.1145/592849.592851", 441 | } 442 | 443 | 444 | @mastersthesis{HelloOS, 445 | title = "{Design and Implementation of an Operating System in Standard ML}", 446 | author = "Guangrui Fu", 447 | month = "August", 448 | year = "1999", 449 | school = "University of Hawaii at Manoa" 450 | } 451 | 452 | 453 | 454 | 455 | @phdthesis{MorrisettPhD, 456 | title ="{Compiling with Types}", 457 | author ="Greg Morrisett", 458 | month ="December", 459 | year ="1995", 460 | school ="Carnegie Mellon University" 461 | } 462 | 463 | @phdthesis{TarditiPhD, 464 | author="David Tarditi", 465 | title="Design and Implementation of Code Optimizations for a Type-Directed Compilation for Standard ML", 466 | year="1996", 467 | school="Carnegie Mellon University" 468 | } 469 | 470 | @article{FoxNet, 471 | author = "Edoardo S. Biagioni and Robert Harper and Peter Lee", 472 | title = "{A Network Protocol Stack in Standard ML}", 473 | pages = "309--356", 474 | journal = "{Journal of Higher-Order and Symbolic Computation}", 475 | volume = "14", 476 | number = "4", 477 | year = "2001", 478 | issn = "1388-3690", 479 | doi = {http://dx.doi.org/10.1023/A:1014403914699}, 480 | } 481 | 482 | @techreport{biagioni95sequence, 483 | title = "{Sequence Types for Functional Languages}", 484 | author = "Edoardo S. Biagioni", 485 | institution = "{School of Computer Science, Carnegie Mellon University}", 486 | month = "August", 487 | year = "1995", 488 | number = "CMU-CS-95-180" 489 | } 490 | 491 | 492 | 493 | @inproceedings{Henderson82, 494 | title = "{Purely Functional Operating Systems}", 495 | author = "P. Henderson", 496 | booktitle = "{Proceedings of the Conference on Functional Programming and Its Applications}", 497 | pages = "177--192", 498 | year = "1982" 499 | } 500 | 501 | @inproceedings{Turner97, 502 | author = {D Turner}, 503 | title = {Functional programming and communicating processes}, 504 | booktitle = {Volume II: Parallel Languages on PARLE: Parallel Architectures and Languages Europe}, 505 | year = {1987}, 506 | isbn = {0-387-17945-3}, 507 | pages = {54--74}, 508 | location = {Eindhoven, The Netherlands}, 509 | publisher = {Springer-Verlag}, 510 | address = {London, UK} 511 | } 512 | 513 | @inproceedings{Fudgets, 514 | title = "{Programming with Fudgets}", 515 | author = "Thomas Hallgren and Magnus Carlsson", 516 | booktitle = "{Lecture Notes from the First International Spring School on Advanced Functional Programming Techniques}", 517 | pages = "137--182", 518 | month = "May", 519 | year = "1995", 520 | address = "{Bastad, Sweden}", 521 | isbn = {3-540-59451-5} 522 | } 523 | 524 | 525 | 526 | @article{Landin65, 527 | title = "{A Correspondence Between ALGOL 60 and Church's Lambda-Notation: Parts I/II}", 528 | author = "Peter J. Landin", 529 | pages = "89-101:158-165", 530 | journal = "{Communications of the ACM}", 531 | volume = "8", 532 | number = "2/3", 533 | month = "February/March", 534 | year = "1965" 535 | } 536 | 537 | @book{GordonPhD, 538 | title = "{Functional Programming and Input/Output}", 539 | author = "Andrew D. Gordon", 540 | year = "1992", 541 | publisher = "Cambridge University Press" 542 | } 543 | 544 | 545 | @techreport{modula-3, 546 | title = "{Modula-3 Report (revised)}", 547 | author = "Luca Cardelli and James Donahue and Lucille Glassman and Mick Jordan and Bill Kalsow and Greg Nelson", 548 | month = "November", 549 | year = "1989", 550 | number = "SRC-RR-52", 551 | institution = "HP Labs" 552 | } 553 | 554 | @inproceedings{os-modula3, 555 | title = "{Writing an Operating System with Modula-3}", 556 | author = "Emin G{\"u}n Sirer and Stefan Savage and Przemyslaw Pardyak and Greg P. DeFouw and Mary Ann Alapat and and Brian Bershad", 557 | booktitle = "{Proceedings of the First Workshop on Compiler Support for System Software}", 558 | pages = "134--140", 559 | month = "February", 560 | year = "1996", 561 | address = "{Tucson, AZ, USA}" 562 | } 563 | 564 | @techreport{m3exts, 565 | title = "{Language Support for Extensible Operating Systems}", 566 | author = "Wilson C. Hsieh and Marc E. Fiuczynski and Charles Garrett and Stefan Savage and David Becker and Brian N. Bershad", 567 | year = "1995", 568 | number = "{TR-95-11-02}", 569 | institution = "{University of Washington}" 570 | } 571 | 572 | @inproceedings{SPIN, 573 | title = "{Extensibility, Safety and Performance in the SPIN Operating System}", 574 | author = "Brian N. Bershad and Stefan Savage and Przemyslaw Pardyak and Emin Gun Sirer and Marc E. Fiuczynski and David Becker and Craig Chambers and Susan Eggers", 575 | booktitle = "{Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles}", 576 | pages = "267--284", 577 | month = "December", 578 | year = "1995", 579 | address = "{Copper Mountain, CO, USA}" 580 | } 581 | 582 | @inproceedings{wadler-blott, 583 | title = "{How to Make Ad-hoc Polymorphism Less Ad Hoc}", 584 | author = "Philip Wadler and Stephen Blott", 585 | booktitle = {Proceedings of the Sixteenth ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages}, 586 | month = "January", 587 | year = "1989", 588 | pages = "60--76", 589 | address = "{Austin, TX, USA}" 590 | } 591 | 592 | @inproceedings{memory-regions, 593 | title = "{Region-Based Memory Management in Cyclone}", 594 | author = "Dan Grossman and Greg Morrisett and Trevor Jim and Michael Hicks and Yanling Wang and James Cheney", 595 | booktitle = "{Proceedings of the ACM SIGPLAN 2002 Conference on Programming Language Design and Implementation}", 596 | pages = "282--293", 597 | month = "June", 598 | year = "2002", 599 | address = "Berlin, Germany", 600 | } 601 | 602 | @techreport{GADT, 603 | title = "{Simple Unification-Based Type Inference for GADTs}", 604 | author = "Dimitrios Vytiniotis and Stephanie Weirich and Simon {Peyton Jones}", 605 | month = "April", 606 | year = "2006", 607 | number = "{MS-CIS-05-2}", 608 | institution = "{University of Pennsylvania}", 609 | notes = "Under revision." 610 | } 611 | 612 | @book{curry-howard, 613 | title = "{Type Theory and Functional Programming}", 614 | author = "Simon Thompson", 615 | year = "1991", 616 | publisher = "Addison-Wesley", 617 | ISBN = "0-201-41667-0" 618 | } 619 | 620 | @inproceedings{Reynolds72, 621 | title = "{Definitional Interpreters for Higher-Order Programming Languages}", 622 | author = "John C. Reynolds", 623 | booktitle = "{Proceedings of the ACM Annual Conference}", 624 | year = "1972", 625 | pages = "717--740", 626 | address = "{Boston, MA, USA}" 627 | } 628 | 629 | @inproceedings{Bell94, 630 | author = "Jeffrey M. Bell and Fran{\c c}oise Bellegarde and James Hook", 631 | title = "{Type-driven Defunctionalization}", 632 | booktitle = "{Proceedings of the Second ACM SIGPLAN International Conference on Functional Programming}", 633 | pages = "25--37", 634 | month = "June", 635 | year = "1997", 636 | address = "{Amsterdam, Netherlands}", 637 | } 638 | 639 | @article{pottier04, 640 | title = "{Polymorphic Typed Defunctionalization and Concretization}", 641 | author = "Fran{\c c}ois Pottier and Nadji Gauthier", 642 | journal = "Higher-Order and Symbolic Computation", 643 | pages = "125--162", 644 | year = "2006", 645 | volume = "19", 646 | number = "1" 647 | } 648 | 649 | @inproceedings{effects 650 | , title = "{The Type and Effect Discipline}" 651 | , author = "Jean-Pierre Talpin and Pierre Jouvelot" 652 | , booktitle = "{Proceedings of the Seventh Annual IEEE Symposium on Logic in Computer Science}" 653 | , pages = "162--173" 654 | , year = "1992" 655 | , address = "{Santa Cruz, CA, USA}" 656 | } 657 | 658 | @inproceedings{monad_transformers, 659 | title = "{Monad Transformers and Modular Interpreters}", 660 | author = "Sheng Liang and Paul Hudak and Mark Jones", 661 | booktitle = "{Proceedings of the Twenty Second ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages}", 662 | pages = "333--343", 663 | month = "January", 664 | year = "1995", 665 | address = "{San Francisco, CA, USA}", 666 | } 667 | 668 | @inproceedings{johnsson85, 669 | title = "{Lambda Lifting: Transforming Programs to Recursive Equations}", 670 | author = "Thomas Johnsson", 671 | booktitle = "{Proceedings of the 1985 Conference on Functional Programming Languages and Computer Architecture}", 672 | pages = "190--203", 673 | month = "September", 674 | year = "1985", 675 | address = "{Nancy, France}", 676 | } 677 | 678 | 679 | @inproceedings{FC, 680 | title = "{System F with Type Equality Coercions}", 681 | author = "Martin Sulzmann and Manuel Chakravarty and Simon {Peyton Jones} and Kevin Donnelly", 682 | booktitle = "{The ACM SIGPLAN Workshop on Types in Language Design and Implementation}", 683 | month = "January", 684 | year = "2007", 685 | pages = "53--66", 686 | address = "{Nice, France}" 687 | } 688 | 689 | 690 | @inproceedings{liedtke 691 | , author = "Jochen Liedtke" 692 | , title = "{On $\mu$-Kernel Construction}" 693 | , booktitle = "Proceedings of the Fifteenth ACM Symposium on Operating System Principles" 694 | , pages = "237--250" 695 | , month = "December" 696 | , year = "1995" 697 | , address = "{Copper Mountain Resort, CO, USA}" 698 | } 699 | 700 | @manual{L4manual, 701 | title = "{L4 eXperimental Kernel Reference Manual}", 702 | author = "{L4ka Team}", 703 | month = "January", 704 | year = "2005", 705 | note = "\url{http://l4ka.org/}", 706 | } 707 | 708 | @manual{IA32 709 | , title = "{IA-32 Intel Architecture Software Developer's Manual (Volume 3a)}" 710 | , organization = "{Intel Corporation}" 711 | , month = "January" 712 | , year = "2006" 713 | , note = "\url{http://www.intel.com/products/processor/manuals/index.htm}, date viewed: 25 April 2007" 714 | } 715 | 716 | @manual{Zilog, 717 | title = "{Z80-CPU, Z80A-CPU Technical Manual}", 718 | organization = "{Zilog, Inc.}", 719 | year = "1977", 720 | note = "Information about the {Z80} is also available from \url{http://www.z80.info/}, date viewed: 25 April 2007" 721 | } 722 | 723 | @article{Goguen, 724 | title = "{Initial Algebra Semantics and Continuous Algebras}", 725 | author = "J. A. Goguen and J. W. Thatcher and E. G. Wagner and J. B. Wright", 726 | journal = "{Journal of the ACM}", 727 | volume = "24", 728 | number = "1", 729 | pages = "68--95", 730 | month = "January", 731 | year = "1977" 732 | } 733 | 734 | @article{bryant92symbolic, 735 | title = "{Symbolic Boolean Manipulation with Ordered Binary-Decision Diagrams}", 736 | author = "Randal E. Bryant", 737 | journal = "{ACM Computing Surveys}", 738 | pages = "293--318", 739 | volume = "24", 740 | number = "3", 741 | month = "September", 742 | year = "1992" 743 | } 744 | 745 | @inproceedings{moggi89computational, 746 | title = "{Computational Lambda-Calculus and Monads}", 747 | author = "Eugenio Moggi", 748 | booktitle = "{Proceedings of the Fourth Annual IEEE Symposium on Logic in Computer Science}", 749 | pages = "14--23", 750 | month = "June", 751 | year = "1989", 752 | address = "{Pacific Grove, CA, USA}" 753 | } 754 | 755 | @inproceedings{PJWadler94, 756 | title = "{Imperative Functional Programming}", 757 | author = "Simon {Peyton Jones} and Philip Wadler", 758 | booktitle = "{Proceedings of the Twentieth ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages}", 759 | pages = "71--84", 760 | year = "1993", 761 | address = "{Charleston, SC, USA}" 762 | } 763 | 764 | @article{Blume01, 765 | title = "{No-Longer-Foreign: Teaching an ML Compiler to Speak C ``Natively''}", 766 | author = "Matthias Blume", 767 | journal = "Electronic Notes in Theoretical Computer Science", 768 | volume = "59", 769 | number = "1", 770 | month = "November", 771 | year = "2001", 772 | pages = "36--52" 773 | } 774 | 775 | @inproceedings{mpj2000, 776 | title = "{Type Classes with Functional Dependencies}", 777 | author = "Mark P. Jones", 778 | booktitle = "{Proceedings of the Ninth European Symposium on Programming}", 779 | pages = "230--244", 780 | month = "March", 781 | year = "2000", 782 | address = "{Berlin, Germany}" 783 | } 784 | 785 | @techreport{mpj1994, 786 | title = "{Simplifying and Improving Qualified Types}", 787 | author = "Mark P. Jones", 788 | number = "YALEU/DCS/RR-1040", 789 | month = "June", 790 | year = "1994", 791 | institution = "Yale University", 792 | address = "{New Haven, CT, USA}" 793 | } 794 | 795 | @book{mpj1994a, 796 | title = "{Qualified Types: Theory and Practice}", 797 | author = "Mark P. Jones", 798 | month = "November", 799 | year = "1994", 800 | publisher = "Cambridge University Press", 801 | } 802 | 803 | @inproceedings{mpj1992, 804 | title = "{A Theory of Qualified Types}", 805 | author = "Mark P. Jones", 806 | booktitle = "{Proceedings of the Fourth European Symposium on Programming}", 807 | month = "February", 808 | year = "1992", 809 | address = "{Rennes, France}" 810 | } 811 | 812 | 813 | @article{mpj1995, 814 | title = "{A System of Constructor Classes: Overloading and Implicit Higher-Order Polymorphism}", 815 | author = "Mark P. Jones", 816 | journal = "{Journal of Functional Programming}", 817 | volume = "5", 818 | number = "1", 819 | pages = "1--35", 820 | month = "January", 821 | year = "1995" 822 | } 823 | 824 | @techreport{harper90, 825 | title = "{Extensible Records Without Subsumption}", 826 | author = "Robert W. Harper and Benjamin C. Pierce", 827 | month = "Feburary", 828 | year = "1990", 829 | number = "{CMU-CS-90-102}", 830 | institution = "{School of Computer Science, Carnegie Mellon University}" 831 | } 832 | 833 | @phdthesis{GasterJones96, 834 | title = "{Records, Variants, and Qualified Types}", 835 | author = "Benedict R. Gaster", 836 | month = "July", 837 | year = "1996", 838 | school = "{University of Nottingham}" 839 | } 840 | 841 | @article{mil1978, 842 | title = "{A Theory of Type Polymorphism in Programming}", 843 | author = "Robin Milner", 844 | journal = "{Journal of Computer and System Sciences}", 845 | month = "December", 846 | year = "1978", 847 | volume = "17", 848 | number = "3", 849 | pages = "348--375" 850 | } 851 | 852 | @manual{cryptol, 853 | title = "{Cryptol Reference Manual}", 854 | organization = "{Galois Inc.}", 855 | month = "January", 856 | year = "2004", 857 | note = "\url{http://www.cryptol.net/doc.htm}, date viewed: 25 April 2007 " 858 | } 859 | 860 | @manual{bluespec, 861 | title = "{Bluespec Language Definition}", 862 | author = "Lennart Augustsson and Jacob Schwartz and Rishiyur S. Nikhil", 863 | organization = "Sandburst Corporation", 864 | month = "December", 865 | year = "2002" 866 | } 867 | 868 | @article{pattern-guards, 869 | title = "{Pattern Guards and Transformational Patterns}", 870 | author = "Martin Erwig and Simon Petyon Jones", 871 | journal = "Electronic Notes in Theoretical Computer Science", 872 | volume = "41", 873 | number = "1", 874 | month = "August", 875 | pages = "12.1-12.27", 876 | year = "2001", 877 | } 878 | 879 | @unpublished{scoped-vars, 880 | title = "{Lexically Scoped Type Variables}", 881 | author = "Simon {Peyton Jones} and Mark Shields", 882 | month = "March", 883 | year = "2004", 884 | note = "This paper is available from: \url{http://research.microsoft.com/~simonpj/papers/scoped-tyvars}, date viewed: 25 April 2008" 885 | } 886 | 887 | @book{Haskell, 888 | title = "{Haskell 98 Language and Libraries, The Revised Report}", 889 | editor = "Simon {Peyton Jones}", 890 | publisher = "Cambridge University Press", 891 | year = "2003" 892 | } 893 | 894 | @inproceedings{views, 895 | title = "{Views: A Way for Pattern Matching to Cohabit with Data Abstraction}", 896 | author = "Philip Wadler", 897 | booktitle = "Proceedings of the Fourteenth Symposium on Principles of Programming Languages", 898 | pages = "307--312", 899 | year = "1987" 900 | } 901 | 902 | @article{SLED, 903 | title = "{Specifying Representations of Machine Instructions}", 904 | author = "Norman Ramsey and Mary F. Fernandez", 905 | journal = "{ACM Transactions on Programming Languages and Systems}", 906 | volume = "19", 907 | number = "3", 908 | pages = "492--524", 909 | year = "1997" 910 | } 911 | 912 | @inproceedings{PADS, 913 | title = "{PADS: A Domain-Specific Language for Processing Ad Hoc Data}", 914 | author = "Kathleen Fisher and Robert Gruber", 915 | booktitle = "{Proceedings of the 2005 ACM SIGPLAN Conference on Programming Language Design and Implementation}", 916 | pages = "295--304", 917 | month = "June", 918 | year = "2005", 919 | address = "{Chicago, IL, USA}" 920 | } 921 | 922 | @inproceedings{DataScript, 923 | title = "{DataScript---A Specification and Scripting Language for Binary Data}", 924 | author = "Godmar Back", 925 | booktitle = "Proceedings of the ACM Conference on Generative Programming and Component Engineering", 926 | pages = "66--77", 927 | month = "October", 928 | year = "2002", 929 | address = "Pittsburgh, PA, USA" 930 | } 931 | 932 | @manual{NE2000, 933 | title = "DP8390D/NS32490 NIC Network Interface Controller", 934 | organization = "National Semiconductor", 935 | month = "July", 936 | year = "1995", 937 | note = "\url{http://www.national.com/opf/DP/DP8390D.html}, date viewed: 25 April 2007" 938 | } 939 | 940 | @inproceedings{FunNotation, 941 | title = "{A Functional Notation for Functional Dependencies}", 942 | author = "Matthias Neubauer and Peter Thiemann and Martin Gasbichler and Michael Sperber", 943 | booktitle = "{Proceedings of the 2001 ACM SIGPLAN Haskell Workshop}", 944 | month = "September", 945 | year = "2001", 946 | pages = "101--120", 947 | address = "Firenze, Italy" 948 | } 949 | 950 | @inproceedings{House, 951 | title = "{A Principled Approach to Operating System Construction in Haskell}", 952 | author = "Thomas Hallgren and Mark P. Jones and Rebekah Leslie and Andrew Tolmach", 953 | booktitle = "{Proceedings of the Tenth ACM SIGPLAN International Conference on Functional Programming}", 954 | pages = "116--128", 955 | month = "September", 956 | year = "2005", 957 | address = "Tallinn, Estonia" 958 | } 959 | 960 | @article{Tolmach98, 961 | title = "{From ML to Ada: Strongly-typed Language Interoperability via Source Translation}", 962 | author = "Andrew Tolmach and Dino P. Oliva", 963 | journal = "Journal of Functional Programming", 964 | pages = "367--412", 965 | volume = "8", 966 | number = "4", 967 | month = "July", 968 | year = "1998" 969 | } 970 | 971 | @manual{CamlIDL, 972 | title = "{CamlIDL User's Manual}", 973 | author = "Xavier Leroy", 974 | organization = "INRIA Rocquencourt", 975 | note = "\url{http://caml.inria.fr/pub/old_caml_site/camlidl}, date viewed: 25 April 2005" 976 | } 977 | 978 | @inproceedings{HDirect, 979 | title = "{H/Direct: A Binary Foreign Language Interface for Haskell}", 980 | author = "Sigbjorn Finne and Daan Leijen and Erik Meijer and Simon {Peyton Jones}", 981 | booktitle = "{Proceedings of the Third ACM SIGPLAN International Conference on Functional Programming}", 982 | pages = "153-162", 983 | month = "September", 984 | year = "1998", 985 | address = "{Baltimore, MD, USA}" 986 | } 987 | 988 | @article{fisher01, 989 | title = "{A Framework for Interoperability}", 990 | author = "Kathleen Fisher and Ricardo Pucella and John Reppy", 991 | journal = "Electronic Notes in Theoretical Computer Science", 992 | volume = "59", 993 | number = "1", 994 | pages = "3--19", 995 | month = "November", 996 | year = "2001" 997 | } 998 | 999 | @phdthesis{GrossmanPhD, 1000 | title = "{Safe Programming at the C Level of Abstraction}", 1001 | author = "Daniel Joeseph Grossman", 1002 | month = "August", 1003 | year = "2003", 1004 | school = "{Cornell University}" 1005 | } 1006 | 1007 | @manual{HaskellFFI, 1008 | title = "{Haskell 98 Foreign Function Interface (1.0)}", 1009 | author = "Manuel M. T. Chakravarty and the Haskell FFI Team", 1010 | year = "2003", 1011 | note = "\url{http://www.cse.unsw.edu.au/~chak/haskell/ffi}" 1012 | } 1013 | 1014 | @inproceedings{cyclone, 1015 | title = "{Cyclone: A Safe Dialect of C}", 1016 | author = "Trevor Jim and Greg Morrisett and Dan Grossman and Michael Hicks and James Cheney and Yanling Wang", 1017 | booktitle = "Proceedings of the USENIX Annual Technical Conference", 1018 | pages = "275--288", 1019 | month = "June", 1020 | year = "2002", 1021 | address = "{Monterey, CA, USA}" 1022 | } 1023 | 1024 | @book{C, 1025 | title = "{The C Programming Language}", 1026 | author = "Brian W. Kernighan and Dennis M. Ritchie", 1027 | year = "1988", 1028 | publisher = "Prentice Hall" 1029 | } 1030 | 1031 | @book{strout97, 1032 | title = "{The C++ Programming Language}", 1033 | author = "Bjarne Stroustrup", 1034 | year = "1997", 1035 | publisher = "Addison-Wesley" 1036 | } 1037 | 1038 | @conference{chak05, 1039 | title = "{Associated Type Synonyms}", 1040 | author = "Manuel M. T. Chakravarty and Gabriele Keller and Simon {Peyton Jones}", 1041 | booktitle = "{Proceedings of the Tenth ACM SIGPLAN International Conference on Functional Programming}", 1042 | pages = "241--253", 1043 | month = "September", 1044 | year = "2005", 1045 | address = "Tallinn, Estonia" 1046 | } 1047 | 1048 | @phdthesis{FilinskiPhD, 1049 | title = "{Controlling Effects}", 1050 | author = "Andrzej Filinski", 1051 | month = "May", 1052 | year = "1996", 1053 | school = "{Carnegie Mellon University}" 1054 | } 1055 | 1056 | @inproceedings{bitdata, 1057 | title = "{High-level Views on Low-level Representations}", 1058 | author = "Iavor S. Diatchki and Mark P. Jones and Rebekah Leslie", 1059 | booktitle = "Proceedings of the Tenth ACM SIGPLAN International Conference on Functional Programming", 1060 | pages = "168--179", 1061 | month = "September", 1062 | year = "2005", 1063 | address = "Tallinn, Estonia" 1064 | } 1065 | 1066 | @article{MoggiSabryEffects, 1067 | title = "{Monadic Encapsulation of Effects: A Revised Approach (extended version)}", 1068 | author = "Eugenio Moggi and Amr Sabry", 1069 | journal = "{Journal of Functional Programming}", 1070 | volume = "11", 1071 | number = "6", 1072 | year = "2001", 1073 | pages = "591--627", 1074 | publisher = "{Cambridge University Press}" 1075 | } 1076 | 1077 | @article{WadlerThiemannEffects, 1078 | title = "{The Marriage of Effects and Monads}", 1079 | author = "Philip Wadler and Peter Thiemann", 1080 | journal = "{ACM Transactions on Computational Logic}", 1081 | volume = "4", 1082 | number = "1", 1083 | year = "2003", 1084 | pages = "1--32", 1085 | publisher = "{ACM Press}" 1086 | } 1087 | 1088 | @inproceedings{Ensemble, 1089 | title = "{Building Reliable, High-Performance Communication Systems from Components}", 1090 | author = "Xiaoming Liu and Christoph Kreitz and Robbert van Renesse and Jason Hickey and Mark Hayden and Ken Birman and Robert Constable", 1091 | booktitle = "{Proceedings of the Seventeenth ACM Symposium on Operating System Principles}", 1092 | month = "December", 1093 | year = "1999", 1094 | pages = "80--92", 1095 | address = "{Kiawah Island Resort, SC, USA}" 1096 | } 1097 | 1098 | @techreport{FoxProject, 1099 | title = "{The Fox project: Advanced Language Technology for Extensible Systems}", 1100 | author = "Robert Harper and Peter Lee and Frank Pfenning", 1101 | number = "{CMU-CS-98-107}", 1102 | month = "January", 1103 | year = "1998", 1104 | institution = "{School of Computer Science, Carnegie Mellon University}" 1105 | } 1106 | 1107 | @techreport{Timber, 1108 | author = "Mark P. Jones and Magnus Carlsson and Johan Nordlander", 1109 | title = "{Composed, and in Control: Programming the Timber Robot}", 1110 | month = "August", 1111 | year = "2002", 1112 | institution = "{OGI School of Science \& Engineering at OHSU}" 1113 | } 1114 | 1115 | @inproceedings{nhc, 1116 | author = {Niklas R\"{o}jemo}, 1117 | title = {Highlights from nhc\—a space-efficient Haskell compiler}, 1118 | booktitle = {FPCA '95: Proceedings of the seventh international conference on Functional programming languages and computer architecture}, 1119 | year = {1995}, 1120 | pages = {282--292}, 1121 | location = {La Jolla, California, United States}, 1122 | } 1123 | 1124 | @inproceedings{hgc, 1125 | title = {A General Framework for Certifying Garbage Collectors and 1126 | Their Mutators}, 1127 | author = {Andrew McCreight and Zhong Shao and Chunxiao Lin and Long Li}, 1128 | booktitle = {Proceedings of the 2007 ACM SIGPLAN Conference on Programming 1129 | Language Design and Implementation (PLDI'07)}, 1130 | address = {San Diego, CA}, 1131 | pages = {468--479}, 1132 | month = "June", 1133 | year = "2007" 1134 | } 1135 | 1136 | @inproceedings{sys_soft_exp, 1137 | title = {Writing Systems Software in a Functional Language: An Experience Report}, 1138 | author = "Iavor S. Diatchki and Thomas Hallgren and Mark P. Jones and Rebekah Leslie and Andrew Tolmach", 1139 | booktitle = {Proceedings of the Fourth Workshop on Programming Languages and Operating Systems (PLOS 2007)}, 1140 | month = {October}, 1141 | year = {2007}, 1142 | address = "{Stevenson, WA, USA}" 1143 | } 1144 | 1145 | @inproceedings{memory-areas, 1146 | title = {Strongly Typed Memory Areas}, 1147 | author = "Iavor S. Diatchki and Mark P. Jones", 1148 | booktitle = {Proceedings of ACM SIGPLAN 2006 Haskell Workshop}, 1149 | pages = "72--83", 1150 | month = {September}, 1151 | year = {2006}, 1152 | address = "Portland, Oregon" 1153 | } 1154 | 1155 | @techreport{L4X2, 1156 | title = "{L4 eXperimental Kernel Reference Manual, Version X.2}", 1157 | author = "{L4Ka Team}", 1158 | institution = "{System Architecture Group, Department of Computer Science, Universit\"{a}t Karlsruhe}", 1159 | month = "May", 1160 | year = "2009", 1161 | note = "\url{http://www.l4ka.org/}" 1162 | } 1163 | 1164 | @inproceedings{UnpointedTypes, 1165 | author = "John Launchbury and Ross Paterson", 1166 | title = "Parametricity and Unboxing with Unpointed Types", 1167 | booktitle = "{European Symposium on Programming (ESOP 1996)}", 1168 | publisher = "{Springer Verlag, 1169 | Lecture Notes in Computer Science (LNCS 1058)}", 1170 | address = "{Link\"{o}ping, Sweden}", 1171 | month = "April", 1172 | year = "1996" 1173 | } 1174 | 1175 | @inproceedings{FunctionalNotation, 1176 | title = "Language and Program Design for Functional Dependencies", 1177 | author = "Mark P. Jones and Iavor Diatchki", 1178 | booktitle = "{Proceedings of the ACM Haskell Symposium (Haskell '08)}", 1179 | address = "{Victoria, British Columbia, Canada}", 1180 | month = "September", 1181 | year = "2008" 1182 | } 1183 | 1184 | @inproceedings{TypeClassDirectives, 1185 | title = "{Type Class Directives}", 1186 | author = "Bastiaan Heeren and Jurriaan Hage", 1187 | booktitle = "{Seventh International Symposium on Practical Aspects of Declarative Languages (PADL 05)}", 1188 | publisher = "{Springer Verlag, 1189 | Lecture Notes in Computer Science (LNCS 3350)}", 1190 | address = "{Long Beach, California, USA}", 1191 | month = "January", 1192 | year = "2005" 1193 | } 1194 | 1195 | -------------------------------------------------------------------------------- /updates.txt: -------------------------------------------------------------------------------- 1 | This file is a TODO list for eventual updates to the Habit language report: 2 | 3 | - In the treatment of type synonyms, there should be functional dependencies 4 | in both directions. In addition, we now add a trailing fails clause to 5 | the generated instance. For example, a type synonym like: 6 | 7 | type T a = t 8 | 9 | is now translated as follows (with a fresh variable v): 10 | 11 | class T a v | a -> v, v -> a -- <<< Second dependency is new 12 | instance T a = t 13 | else T a = v fails -- <<< New 14 | 15 | - In a similar way, we now add trailing fails clauses to generated BitSize 16 | and ByteSize instances; this prevents a programmer from defining bogus 17 | sizes. As an example, the definition: 18 | 19 | bitdata T/16 = K [ x :: Bit 2 ] 20 | 21 | would generate an instance: 22 | 23 | instance BitSize T = 16 if BitSize (Bit 2) = 16 24 | 25 | This is clearly invalid, but nothing would prevent a user from then 26 | adding an unsound (but non-overlapping) instance to "correct" this: 27 | 28 | instance BitSize T = 16 if BitSize (Bit 2) = 16 29 | 30 | Extending the original instance with an additional "else ... fails" 31 | will prevent the user from adding this unsound instance, and will 32 | ensure that the original, incorrect instance is left in place to 33 | trigger the appropriate error diagnostics. 34 | 35 | - On the other hand, we have reversed the decision to include trailing 36 | "fails" clauses on "Select" and "Update" instances for bitdata and 37 | structure types. This allows us to create "synthetic" fields. 38 | 39 | - Kind polymorphism is now supported. 40 | 41 | - The Lab and Nat types have been replaced by the more general Proxy 42 | type constructor. For any type t, there is a corresponding singleton 43 | type, Proxy t, which can also be written as #t, whose only value is 44 | also written as #t. String literals, such as "next" are now used in 45 | type expressions as types of kind lab (the previous syntax for the 46 | same label was #.next), while integer literals continue to be treated 47 | as types of kind nat. The old Lab f and Nat n types are now replaced 48 | by #f and #n, respectively. The corresponding syntax for expressions 49 | allows terms such as #"next" and #1 of types #"next" and #1, 50 | respectively. (There was previously no way to create values with 51 | types of the form Nat n in Habit syntax; such values could only be 52 | introduced indirectly by writing a numeric literal that is translated 53 | into a call to fromLiteral with a Nat argument. I don't think there 54 | is any problem with providing an expression level syntax for Nat 55 | values, but we might want to think about this, just to be sure ...) 56 | 57 | - There is a restriction in the syntax for defining infix type constructor 58 | operators; it must be possible to figure out which is the type constructor 59 | operator without having to consider fixity information. 60 | 61 | - The report doesn't mention the Proc class and its relationship to the 62 | Monad class and the use of do notation. 63 | 64 | - It turns out that it's useful to generalize the caseFrom and ifFrom 65 | syntax to allow binding of a variable to the result that is produced 66 | by the monadic computation, as in: case x <- e of ... or 67 | if v <- e then ... else ... 68 | 69 | - Make the parentheses around the list of classes in a deriving clause 70 | optional. 71 | 72 | - Decided not to support deriving BitManip for datatypes because I'm 73 | not sure it makes sense there. (In particular, datatypes do not 74 | typically have BitSize instances.) Still ok for bitdata. 75 | 76 | - Allow deriving for Bounded on enumerations and single constructor 77 | datatypes (as in Haskell) and not just single constructor, single 78 | argument types. Similarly for single constructor, single field 79 | bitdata types. 80 | 81 | - Comment that derived equality on bitdata types is bitwise comparison. 82 | 83 | - Only allow derived instances of Ord on bitdata for single constructor, 84 | single field types. 85 | 86 | - Add "compare :: a -> a -> Ordering" to the Ord class, as in Haskell, 87 | with associated default methods. 88 | 89 | - Make Maybe an instance of the Monad and Proc classes. 90 | 91 | In the category of things that we're not planning to document in the 92 | report: 93 | 94 | - The "requires ..." syntax that is supported by the implementation is 95 | not currently expected to become an official part of the language. 96 | 97 | --------------------------------------------------------------------------------