9 ms·
State of the Haskell ecosystem
- paulajohnson 11y agoThanks for this. A couple of points: 1: I'd have rated Haskell's concurrency as "best in class" thanks to its STM implementation. Other languages do have STM, but AFIAK only Haskell provides both efficiency and safety thanks to its type system. Other languages have to choose between tracking every variable (slow) and letting the programmer declare which values are going to be rewound if the transaction aborts (unsafe). 2: Your section on IDEs does not consider Leksah. I've just come back to this after a long time on Eclipse and Atom, and its now a mature IDE specialized for Haskell. You might consider bumping Haskell to "mature" based on this.
- boothead 11y agoGreat to hear that Leksah is coming along. I'm a happy emacs user, but I think a good IDE environment can only help adoption.
- cies 11y agoI agree on concurrency. It is best in class and also offers a lot of choice (which some other popular languages like JS and Go are not providing). When it comes to IDEs I do think immature would also be my choice. There is a lot of movement on this front so I have hopes this may change soon. My main points are: 7.10 is out for a while but most editor integrations have/had (until recently) some major issues with it. Also Stack is bocoming quite popular, yet most editor integrations are not Stack-aware. Finally the editor integrations are not much plug-and-play. As said, this is changing rapidly with some necessary fixes to GHC/cabal made and projects like stack-ide and ghci-ng.
- hamishmack 11y ago> When it comes to IDEs I do think immature would also be my choice. If you have not already logged any issues, can you please list the top few things that bugged you about Leksah here and I will make sure they get added to the issue tracker? Even if they are already there it will help us prioritise to know what your pain points were. Thanks
- srtjstjsj 11y ago> 2: Your section on IDEs does not consider Leksah. I've just come back to this after a long time on Eclipse and Atom, and its now a mature IDE specialized for Haskell. You might consider bumping Haskell to "mature" based on this. On a recent thread on Reddit, the Leksah maintainer acknowledged that on some platform (I forget which), Leksah crashes in every session, and has a CPU-spinning bug.
- hamishmack 11y ago> the Leksah maintainer acknowledged that on some platform (I forget which), Leksah crashes in every session Only on exit, so it has not been a high priority to fix. https://github.com/leksah/leksah/issues/130 https://github.com/leksah/leksah/issues/130 > and has a CPU-spinning bug. This was in version 0.15.1.0, 0.15.1.1 and 0.15.1.2. It was fixed in 0.15.1.3 (released a month after 0.15.1.0). https://github.com/leksah/leksah/issues/149 https://github.com/leksah/leksah/issues/149 Please try Leksah! It is not perfect, but any feedback you could give would help us make it better.
- radmuzom 11y agoThis is a great and a balanced list. I have definitely enjoyed some time spent programming in Haskell. One frustration that I have had while dabbling in Haskell is that some libraries in Hackage assume a GNU/Linux kind of system. For example, I was reading Simon Marlow's book and while trying to compile the examples in a Windows machine, a particular library could not be installed because of the lack of 'configure' (GNU autotools? I only use Windows nowadays due to professional reasons and have not used GNU/Linux last 11 years). I hope that library authors do not make such assumptions unless it really necessary. Is there an opportunity for a company to create an implementation of Haskell which fixes some commonly mentioned problems (e.g. stop the world GC) - like proprietary JVM vendors? Is it even technically feasible? Of course, such a hypothetical company would also need to spend a lot of time writing useful libraries.
- cies 11y agoI've heard the GHC on Windows situation improved a lot with: https://github.com/fpco/minghc https://github.com/fpco/minghc Myself I don't use Windows, so verify the claims. But might be worth to give it another try. Also Stack[1] has made it lots easier to get rolling on that platform. 1: https://github.com/commercialhaskell/stack https://github.com/commercialhaskell/stack
- Myrmornis 11y agoI don't mean to trivialize the complexities and importance of setting up a development environment you are happy with, but Linux is very easily available to a Windows user via virtualbox VMs or boot2docker. Are you sure you can't find a workflow involving those that you're happy with? Editing files doesn't have to use an editor in the VM.
- erose1 11y agoDo you mind explaining what a natural workflow for this would look like? Is it to SSH into the VM using your editor of choice?
- lloyd-christmas 11y ago
- QuantumRoar 11y agoFor me, it was (and still is) terribly hard to find libraries that do what I want. Although Hackage has a large database, it's quite confusing and very hard to figure out how a library actually works. A few years ago, I tried to parse HTML files for a very small thing that I wanted to do and I just couldn't find or understand whether there's actually something out there that I could use. So, instead, I ended up learning Parsec and writing my own crappy parser... I really don't think that's what it should be like. And maybe it's just my own fault. If not, there should be thousands out there who start their Haskell journey with such a frustrating experience. There's a deep and dark abyss in which beginners fall after an initial tutorial. I've never had a similar experience with any other language. The upside, of course, is that Haskell is the most beautiful language I know.
- boothead 11y agoI think this is because the abstractions are so abstract. When functionality is glued together with very general combinators and operators there's not really much to grab hold of unless you understand the abstractions.
- QuantumRoar 11y agoWell said. What always saved me is that brave and devoted individuals wrote tutorials and published them to help me peel away the layers of abstractions. There's no way I could have done that on my own.
- boothead 11y agoWhich is why I view haskell's community as one of its main, less tangible qualities. :-) edit clarity - Apparently my brain is too Haskelled today for writing English
- Symmetry 11y agoSometimes, but sometimes a function just has a type of String -> String with nothing besides the name to tell you what it does.
- tel 11y agoFor ML and Data Science I'd say very immature. HLearn does interesting things but is far from providing a workable ML or Data Science workflow. We need solid, unquestionable Matrix and Vector libs upon which the ~50 bread and butter algorithms cans be solidly implemented. Then Diagrams needs super tight integration and connections to "big data" systems can be built. Frames is moving in the right direction type-wise but it'd be really nice to get HLists (or even vinyl?) in as representations which can be transparently backed by the aforementioned common matrix libs. Lenses could probably help a lot here and I think Anthony is going in that direction exactly. Neatly, the GPU story is actually quite strong and could be integrated with this hypothetical ML and Data Science platform I'm describing quite nicely. That'd be a not small boost to its power.
- jordigh 11y agoWhat's the difference between ML and data science? ML has more programming? And what's the difference between data science and statistics? Statisticians try to come up with new mathematics, while data scientists just try to come up with ways to apply that maths?
- tel 11y agoI'll take a brief stab since I think there are important differences but this is also holy war territory so YMMV. ML tends to be more concerned with scale and computational efficiency as the algorithms used are often (a) heavyweight and (b) less human interpretable. Success is primarily measured objectively but via proxy measures like prediction accuracy. It may require data science efforts behind the scenes in order to succeed. Data Science tends to be more concerned with interpretation than scale or repetition. It sits somewhere between analyst, sataistician, and journalist. It's also a much more interactive workflow often involving a great deal or successive, simple models and lots of exploratory visualization. Measures of success include discovery of human-relatable inferences from data, substantiation or dismissal of human-relevant experimental hypotheses, and success in communication of those ideas. Statistics is a field of study of some of the most important mathematical foundations of each of these roles. A statisicians skill is more generalized but also more abstract. A statistician who learns CS and journalism could easily head into either other field.
- sklogic 11y ago> Haskell is an amazing language for writing your own compiler. If you are writing a compiler in another language you should genuinely consider switching. Uhm, no, thank you, but no. Haskell is poorly equipped for implementing compilers, because of its lack of unrestricted compile-time metaprogramming. I'm spoiled. This is what I want from a language for implementing compilers: 1) Cheap, boilerplate-free definition for chains of slightly different ASTs and IRs. Haskell and ML are notoriously weak in this area (see the "Expression Problem" thing) 2) Boilerplate-free generation of various (potentially complex) visitors for these ASTs and IRs. For Haskell, Scrap Your Boilerplate library is the closest thing to what I want, but it is still far too clumsy. 3) I need efficient embedded Prolog and Datalog (yes, both, the latter allows some cool optimisations not possible for the former). Not feasible without compile-time metaprogramming. Both are important for simplifying compiler construction. 4) Parsing is not very important. But yet, it is necessary. The best Haskell got on offer is Parsec. Sorry, not good enough for my requirements.
- fs111 11y agoOut of curiosity, what language, if any, has those properties?
- sklogic 11y agoAny language that allows compile-time metaprogramming (and not as restricted as TH) should allow to implement all the components I want. One example of such a system is the Nanopass framework [1], used alongside with cKanren [2]. Another example is my own system [3]. [1] https://github.com/akeep/nanopass-framework https://github.com/akeep/nanopass-framework http://www.cs.indiana.edu/~dyb/pubs/nano-jfp.pdf http://www.cs.indiana.edu/~dyb/pubs/nano-jfp.pdf [2] http://scheme2011.ucombinator.org/papers/Alvis2011.pdf http://scheme2011.ucombinator.org/papers/Alvis2011.pdf [3] https://github.com/combinatorylogic/mbase https://github.com/combinatorylogic/mbase
- charlieflowers 11y ago@sklogic, I have been looking for something like MBase. Is there something like a beginner's tutorial anywhere?
- protomyth 11y agoAlthough hinted at in "Mobile apps" and "Package management", I think you might want to add "Deployment" to your list of criteria for a language. It is often overlooked with languages and frameworks, but the ability and method of deploying code (particularly with a running system) should not be ignored.
- reflexer 11y agoI think the rating difference between sections "application domains" and "common programming" illustrates clearly what is known as "academia language", i.e. advanced, mature features and lack of real application stories and libraries.
- progman 11y agoOne point is missing: the state of debugging. Current state: https://wiki.haskell.org/Debugging https://wiki.haskell.org/Debugging For comparison (F# and Ocaml): https://msdn.microsoft.com/en-us/library/ee241127.aspx http://oqamldebug.forge.ocamlcore.org/
- the-owlery 11y agoI've avoided Haskell, primarily because: * hearing how difficult it is to learn, and * recalling C++ & Java, not crazy about the idea of going back to having to specify types for everything. But Haskell is enticing to me: * bindings to C-libraries in general (been meaning to try GTK, and wanted to use SQLite for a small project) * apps start-up quickly * compiled (good performance) What's the Haskell community like? Is Haskell a practical language/ecosystem, or more academic-focused?
- boothead 11y ago> * recalling C++ & Java, not crazy about the idea of going back to having to specify types for everything. This is a big misconception. The type system in Haskell becomes much more of a tool than a hindrance. Although you will tend to write type signatures for all your top level functions, type inference is very good and it's not necessary most of the time. The reason you should consider writing at least the top level signatures is that when you do the compiler will help you fill in the banks with type holes. See * https://www.reddit.com/r/haskell/comments/19aj9t/holedriven_haskell/ https://www.reddit.com/r/haskell/comments/19aj9t/holedriven_... * https://wiki.haskell.org/GHC/Typed_holes https://wiki.haskell.org/GHC/Typed_holes Once you learn these tricks, it can really feel like magic sometimes. :-)
- sklogic 11y ago> recalling C++ & Java, not crazy about the idea of going back to having to specify types for everything. In the dynamically typed languages static types are substituted with tons of trivial (stupidly trivial) tests, which is a way much more lines of code than with just simple type annotations.
- digitalzombie 11y ago> * hearing how difficult it is to learn, and I thought it was pretty straight forward coming from Erlang. The biggest thing for me was practice thinking in recursion.
- srtjstjsj 11y agoThe person you are replying to, unawares of the difference between static typing and type inference, is not going to find Erlang any easier to learn.
- airza 11y agoTrying to get a Haskell application deployed to the web was an exercise in frustration. Somehow my resolution for its important package management and binaries has become profoundly fucked up as well.
- dukerutledge 11y agoReally? Deployment has always been a breeze for me. Build on a vm, scp the binary up to my server, profit.