--- title: My vision for the Future of Programing Languages updated: 2021-06-20 lang: en summary: A description of a fictitious future programing language. tags: - tech - unison - haskell - fragnix - grin --- People who know me closer know that I have an obsession with finding the perfect programing language. # The Criteria I would like to have a programing language, that is * strongly, statically and dependently typed * Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer urna lacus, laoreet tempus tincidunt sit amet, dictum sed est. Duis leo ex, tincidunt eu nisi eu, porttitor euismod tortor. Curabitur faucibus quam leo, id bibendum justo eleifend id. * purely functional * uses immutable, semantic hashed, content-addressed code and dependency management * and has automatic, static memory management. Of course what you also always want from a programing language is a nice community, a rich ecosystem, good tooling and obviously a fast execution, but I won’t be talking about those here … ## The Type System I think in the last years static, strong typing has increasingly become mainstream. Examples include type annotations for Python, Typescript and Rust. Of course it is not enough to have static types, they also need to be sufficiently expressive. For me that means that you at the very least need Algebraic Data Types. Still, in this post I am dreaming, and so I would like to have dependent types (with type erasure). I know a lot of people are apprehensive of the "dark type level magic" Haskell offers today. But I am quite convinced that type level programing will get easier and more intuitive once reasoning on the type level works exactly the same as on the term level. One application for which I personally would like good dependent types support is tracking matrix dimensions at the type level, this is currently possible but tedious in Haskell. But of course there are lots and lots of other use cases for dependent types. ## Purely functional I wont argue much for this. But in my opinion it is absolutely a must have. Tracking side effects and having referential stability change how you think about a program and enable declarative programing.