Wearing the hair shirt Wearing the hair shirt - Microsoft Research
Wearing the hair shirt Wearing the hair shirt - Microsoft Research Wearing the hair shirt Wearing the hair shirt - Microsoft Research
Combinator libraries Recursive values are jolly useful type Parser a = String -> (a, String) exp :: Parser Expr exp = lit “let” decls lit “in” exp ||| exp aexp ||| ...etc... This is illegal in ML, because of the value restriction Can only be made legal by eta expansion. But that breaks the Parser abstraction, and is extremely gruesome: exp x = (lit “let” decls lit “in” exp ||| exp aexp ||| ...etc...) x
- Page 1 and 2: Wearing the hair shirt A retrospect
- Page 3 and 4: Haskell is 15 years old (born FPCA
- Page 5 and 6: Timeline Sept 87: kick off Apr 90:
- Page 7 and 8: Reflections on the process The i
- Page 9: Reflections on process Self-appoin
- Page 12 and 13: Syntactic redundancy Seductive ide
- Page 14 and 15: “Expression style” Define a fun
- Page 16 and 17: Example (ICFP02 prog comp) Pattern
- Page 18 and 19: What really matters?
- Page 20 and 21: But... Laziness makes it much, muc
- Page 24 and 25: Laziness keeps you honest Every ca
- Page 26 and 27: Performing I/O main :: IO a A prog
- Page 28 and 29: The do-notation getChar >>= \a -> g
- Page 30 and 31: Monads generally A monad consists o
- Page 32 and 33: Example: a type checker tcExpr :: E
- Page 34 and 35: What have we achieved? The ability
- Page 36 and 37: What we have not achieved Imperati
- Page 38 and 39: Open challenge 2 Which would you pr
- Page 40 and 41: Our biggest mistake Using the scary
- Page 42: SLPJ conclusions Purity is more im
- Page 45 and 46: Implementing type classes data Eq a
- Page 47 and 48: Type classes are useful Type classe
- Page 49 and 50: Quickcheck quickCheck :: Test a =>
- Page 51 and 52: Type-based dispatch class Num a whe
- Page 53 and 54: Type-based dispatch So the links to
- Page 55 and 56: Qualified types Type classes are a
- Page 58 and 59: Sexy types Haskell has become a lab
- Page 60 and 61: How sexy? Damas-Milner is on a cus
- Page 62 and 63: Modules ML functors Difficulty Hask
- Page 64 and 65: Modules Haskell has many features
- Page 66 and 67: Encapsulating it all runST :: (fora
- Page 68: The Haskell committee Arvind Lennar
Combinator libraries<br />
Recursive values are jolly useful<br />
type Parser a = String -> (a, String)<br />
exp :: Parser Expr<br />
exp = lit “let” decls lit “in” exp<br />
||| exp aexp<br />
||| ...etc...<br />
This is illegal in ML, because of <strong>the</strong> value restriction<br />
Can only be made legal by eta expansion.<br />
But that breaks <strong>the</strong> Parser abstraction,<br />
and is extremely gruesome:<br />
exp x = (lit “let” decls lit “in” exp<br />
||| exp aexp<br />
||| ...etc...) x