I rather dislike Haskell and Idris. I find the notation obfuscating, inelegant, and cumbersome. The whole point of types is to prevent errors, but they get so concerned with type checking that they forget it is about expression. If you wanted to declare a pointer to a pointer of an array of records, Modula-2 offered that in the 70's, with the ability to turn off type checking when you needed to break the rules for some low-level purpose. I wish people would read Prof. Wirth's work, or spend 10 minutes with modula-2 to see a prior high-water mark in modularization and type protection. The majority of errors in graphical interactive programming nowadays are related to drawing and event handling, and many languages have neither a database nor a graphical model in the language, so for my purposes of the future of coding, they represent the past of terminal-based languages that are actually retrograde in their effect. Sorry to be such a wet blanket on this line, but you're talking to a guy who heard John Backus in person in 1973 talk about his functional language. FP is not new, and one should be cautious about thinking FP is a magical cure. We all want composability, and reusable parts. I believe there are only 2 unsolved problems in computer science: 1) how to achieve re-usable parts, and 2) how to make debugging go down from 85% of the effort to a more modest fraction.