Quite a good overview over different typesystems.
Idris seems quite compelling with its ability to express and typecheck arbitrary knowledge at compiletime. The problem with dependent typing is, that you somehow have to provide the neccassary type information and because of its versatility, you often have to write a step by step prove. As far as I know, Idris can not even automatically use the commutativity law for addition.
Especially when you just want to try something quickly, it is quite annoying.
Personally I am more interested in refinement typing. The type checker contains a SMT-Solver, that understands basic arithmetic and set theory in a far more convenient way, but unlike dependent typing can no longer proof everything.
Especially LiquidHaskell seems promising, because it is just an optional extension to haskell, so that you can switch it off during prototyping.
John_Uskglass
I didn't quite understand the bit about Idris though. I don't understand how its compiler can verify at compile time that a number will be smaller than another. Obviously this is easy if we're dealing with literals, as was the case in the example, but how would that work with variables?
For obvious reasons you can't assume any properties for yet unknown data, eg. input data, but in practise you often first validate the data and then use a subsystem, that assumes this properties, propably additionally checked with asserts. Refinement typing allows you to retain that info at type system level and therefore provable at compiletime. Even when new values are computed, you can retain some info. For example in a binary search, both boundaries never cross the middle and so the you can derive the input condition for the next step.
hugo
In the spirit of handmade, I had also commented asking if anyone would elaborate why almost nothing useful is written in the great language that is Haskell: https://gist.github.com/garybernh...a6cd674795a9c#gistcomment-1856879
I truly want to understand. My guess is that the development is too slow ("fiddling with types") to be fun and enjoyable? Or that the type system limits expressivity too much...
A languages popularity does not directly relate to usability. Adopting a new language takes a lot of time and makes old code and quite a lot of knowledge useless. Additionally there need to be tools, libraries, a build system, documentation, etc. I think haskell would be a great language for many tasks, but changing the production process would take years for many companies.