Thanks, this was a terrific introduction, and the concrete example clarified things a great deal.
@johnmiller88847 жыл бұрын
Thank you for the excellent talk. I appreciate the explanation of the use case for dependent types which are so often described win formal computer science terms without ever giving a motivation for their value. Seeing now why dependent types might be useful, is there a good resource that describes the skills and techniques needed to write something like the library in your example?
@xtty76447 жыл бұрын
Benjamin Pierce's book Advanced Topics in Types and Programming Languages gives a pretty good explanation on the theoretical background of dependent typing. The book is an extension of the ideas developed in Pierce's previous book, Types and Programming Languages, so you might want to pick that one up first. This should be enough to understand how dependent types work. The rest is just advanced GHC features.
@FourTetTrack Жыл бұрын
I loved the talk, thanks a lot Dr Weirich!!!
@marksaving7566 жыл бұрын
Excellent talk. I learned Haskell after learning Martin-Lof type theory and look forward to writing Π in my programs.
@lordquaggan Жыл бұрын
Wow, having the equivalence proofs just be superclass constraints (32:30) is a really neat idea, which I, for some reason, never thought of. I always end up writing functions that match on singletons and return `:~:` when I need to prove properties like that, which is obviously way more painful.
@centril6 жыл бұрын
A truly awesome and detailed talk!
@shutterrecoil Жыл бұрын
the most representative DT example is at 26:00
@tricky7786 жыл бұрын
At 32:00, is this the same as saying that Repeat is a monad at the typeclass level? Is there any utility in casting the solution in that light? Does anyone know the paths that line of reasoning has taken people?
@mskiptr4 жыл бұрын
This talk is awesome! That `~` relation between types is not commutative, right? Like in 34:00, repeating ≥1 times is also ≥0, but we couldn't write it the other way around: `Repeat s` does not ~ `Merge s (Repeat s)`?