3 ms·
I don't know Haskell, but assumed it would probably tackle this problem based on all the praise I've seen it get for things like this and its general type syste
by hellofunk 11y ago
I don't know Haskell, but assumed it would probably tackle this problem based on all the praise I've seen it get for things like this and its general type system.
- baldfat 11y agoIt gets all the praise but the use of Haskell is still very low. For me the package system drove me into the Arms of Racket and Clojure.
- kornish 11y agoYou should revisit it, then! Stack, a new build tool, far surpasses the Cabal hell that drove people away in the past.
- hellofunk 11y agoI have read many times that you need a solid understanding of the Haskell implementation as well as various extension to make the code as performant as it is elegant. True?
- kornish 11y agoRight now, that's truer than many would like. However, when GHC 8 (the new version of the compiler) drops in the next couple months, most of the performance tuning will involve putting a single line of code at the top of each performance-critical file. That line will make all evaluation within the file strict instead of lazy. A lot of the performance and predictability problems in Haskell come from its laziness, so the ability to toggle that on and off on a per-module (read: per-file) basis will be a game changer.
- hellofunk 11y agoThat does sound significant. I will be curious to hear more about that. Can you recommend a good go-to resource for all the latest news and discussions on Haskell?
- kornish 11y agoMostly I just read various people's blog posts and follow links (for example, I think I first found Stack on [1]). I also spend occasional time in the IRC, which can be useful but isn't a comprehensive news source by any means. I hear some of the mailings lists are informative - iirc there's a haskell-beginners one which will probably cover major updates in tooling, feature releases, and so on. Good luck! [1]: https://www.fpcomplete.com/blog/2015/08/new-in-depth-guide-stack https://www.fpcomplete.com/blog/2015/08/new-in-depth-guide-s...
- tel 11y agoYup. Here's an example. There is no function print :: String -> () (The type () implies "no interesting return value"). This function could only be written via deliberate subversion of the type system. Instead it must be print :: String -> IO () Which is similar, but the return is marked by this IO type. Essentially this restricts you to ensure that side effecting functions are executed in explicit sequence and cannot "poison" pure types.