trouble-with-types
https://www.infoq.com/presentations/data-types-issues/
Author - Martin Odersky
tags :: R:tech
- 
Static types are more common in academia? 
- 
Static - More efficient
- Better ooling
- Fewer tests needed
- Better docs, maintenance etc
 
- 
Dynamic - Simpler
- No boilerplate
- No type-imposed limits on expressiveness
 
Good software design?
- 
Clear 
- 
Correct 
- 
Minimal 
- 
Deterministic 
- 
Patterns and Constraints 
- 
Language for good designs - Patterns -> abstractions
- Constraints -> types?
 
- 
Type systems are finicky, which is why there are so many different ones 
- 
Haskell is strong & static typed! 
- 
Static type: weak/strong vs coarse/detailed - 
C is weak and coarse 
- 
Go is strong, but coarse; simple types but strongly enforced - no generic types
- Simple types cannot be extended by users; use abstractions that are given to you
- normative; there is only to do things
 
- 
R:haskell - type it to the max - rich & turing complete language to write types - these help model expressive systems that are as good as dynamically typed code
- “nothing” type; allows tyoe correctness in WIP code
- type combination forms
 
- 
Typescript etc - cutting corners; detailed but weakly enforced - “post-modern languages”
- appeals to users’ intuitions; covariant generics like “employees are persons, so employee->employer fn is also a person->employer fn”
- embrace unsoundness; can make functions a bit more confusing
- hacky?
 
 
- 
Goal of types: Precision, Soundness, Simplicity
- Most typed languages can only achieve 2 out of 3
Abstractions
- 
Two forms: - Parameters (positional, functional)
- Abtract members (modular, name based)
 
- 
“orthogonal design” where you can mix and match the two - This is particular to Scala
- results in a ton of combinations, which gives you a lot freedom arond structuring code; can be confusing
 
- 
“non-orthogonal design” - has type and a module system 
- 
Use “projections” to reduce dimensionality in orthogonal design - project certain language features into others
 
DOT - Calculus for Dependent Object Types
- Dotty - a scala-like language with DOT at its core