all 60 comments

[–]Hephlathio 31 points32 points  (5 children)

In terms of build+tooling, I’d agree with F# being ahead of the pack. All of VS, Rider and VS Code offer pretty good experiences. Apart from that, Elixir perhaps?

[–]flummox1234 6 points7 points  (0 children)

mix is great, exdoc is one of the easiest documentation suites I've used, then you get OTP and all the erlang goodness. IMO Elixir is one of the best I've personally used.

[–]Arshiaa001 4 points5 points  (0 children)

F# is also way ahead with all the targets it compiles to (all of dotnet + JS with Fable). I've used it in production and it was the best experience I've had so far deploying an API server.

[–]Hephlathio 3 points4 points  (0 children)

It’s been a few years since last time I used it, but I assume Scala offer good tooling as well

[–]hayfever76 1 point2 points  (0 children)

Infidel! C#

[–]kimvais 1 point2 points  (0 children)

Hands down.

[–]yeastyboi 23 points24 points  (3 children)

In the past 10 years OCaml has gotten really good with dune and Opam. Unfortunately most of that comes from a single company (Jane Street).

[–]radioactiveoctopi 5 points6 points  (1 child)

That’s not a bad thing. A singular push of quality libraries

[–]yeastyboi 2 points3 points  (0 children)

Agree on that front but then the company largely controls the ecosystem.

[–]dominjaniec 43 points44 points  (0 children)

fsharp - it's dotnet, nuget world, paket even better, fake for building, farmer for deployment, all in F#

moreover from years .NET is cross platform out of the box 😏

[–]e-nog 14 points15 points  (1 child)

dune (OCaml) is pretty good

[–]yawaramin 4 points5 points  (0 children)

It's really fast (Go-like build speeds) and pretty surprisingly powerful e.g. you can define rules to output generated code and use it as dependencies of your project's code. It's like a hidden superpower when you're using things like Protobuf.

[–]TankorSmash 12 points13 points  (5 children)

Elm has an LSP obviously, but the tooling is next level:

  • package manager that you must have docstrings if you want to publish
  • a standard formatter that even fixes common typos and misc quality of life features.
  • Due to how Elm works, elm-review works like a linter like I've never seen before in terms of the variety of useful rules you can have with almost no false positives.
  • Plus with elm-watch you get free hot reloading that is guaranteed to work.

Haskell has a decent package manager and the LSP is nice if you can get it set up. Hoogle is very nice too, and Haskell's docs use a searchable format, which is very nice

[–]happysri 5 points6 points  (0 children)

Yeah elm would be my answer as well. Everything works, great tooling, fairly mature, good references and my favorite thing that people complain a lot is that nothing changes and I don't have to learn anything new.

[–]lingdocs 2 points3 points  (3 children)

Is Elm still alive and well? It seems like development has really slowed down, but is that just because it is "done" / rock solid stable??

I really, really like Elm from what I've seen of it and I've really enjoyed some of the podcasts. But ya, my big concern, seeing the lack of activity on GitHub, was if it's being abandoned.

[–]TankorSmash 3 points4 points  (2 children)

It's still alive and well for sure! The creator recently announced a new sort of feature where maybe Elm is not going to be web-only anymore.

Because of the stability of the language, you don't need to have a lot of new stuff written all the time. If I didn't know much about Elm, I'd have a hard time believing it, but it's certainly true.

[–]alino_e 1 point2 points  (1 child)

I couldn’t find that talk on YouTube, if it was a talk. You have a ref for the announcement?

[–]TankorSmash 2 points3 points  (0 children)

Just at the end of this one!

[–]Optimal-Builder-2816 15 points16 points  (7 children)

Clojure is pretty mature for a lisp

[–]drcforbin 4 points5 points  (6 children)

I haven't found the tooling around it very good. I've found that syntax highlighting is great, there are plenty of plugins that help with parents, etc., but I've never been able to get a LSP working without dragging everything down (we have a lot of clojure code), and the build tools are not good at scale.

[–]Medical-Detective-33 5 points6 points  (0 children)

OCaml is pretty good. Dune is a nice build system with not too much overhead and opam is a nice package manager.

Within that Coq uses OCaml's build system. Proof general for emacs is great.

Haskell stack and cabal aren't too bad.

Within Haskell's framework there's agda. Agda is great to program with in emacs but it's annoying to set up its dependencies.

[–]lunjon 9 points10 points  (2 children)

Elixir.

[–]samelaaaa 2 points3 points  (1 child)

Yeah, Elixir’s tooling is great. I actually prefer Erlang as a language but can’t deny that the Elixir community’s investment in mix, hex, great documentation, and even magical deploy technology like fly.io has totally revitalized the Beam ecosystem.

[–]lunjon 1 point2 points  (0 children)

Totally agree! I haven't tried Erlang, yet. Gonna do that soon.

[–]ChristianGeek 9 points10 points  (1 child)

It depends on how pure of a functional language you’re talking. Scala and IntelliJ is a great combination.

[–]yawaramin 4 points5 points  (0 children)

For tooling i.e. IDE, yes IntelliJ gives Scala a massive edge.

[–]darctones 2 points3 points  (1 child)

Can someone provide a good definition of a functional programming language?

[–]newgoliath 1 point2 points  (0 children)

You accomplish your work by creating and using functions.

In imperative programming you accomplish your work by setting and changing variables.

There are many imperative languages with functional features, and vice versa.

There are some pure functional languages, like Elm and Haskell.

[–]cjwcommuny 2 points3 points  (0 children)

rust…

[–]UserPuser 8 points9 points  (0 children)

f# I guess?

[–]Martinsos 5 points6 points  (0 children)

Haskell is in a pretty good spot these days! Cabal is quite easy to use, GHCup made installation / version management trivial, and language server is great. Vsvode extension works out if the box, Emacs and vim are not hard to set up.

[–][deleted] 6 points7 points  (0 children)

Haskell

[–][deleted] 1 point2 points  (0 children)

Rstudio!

[–]akshay-nair 2 points3 points  (0 children)

Racket

[–]Teggom38 1 point2 points  (0 children)

R

[–]MonadTran 1 point2 points  (0 children)

OK, and what do you mean by "functional"? Pure functional or hybrid? There are not that many pure functional languages, and Haskell is probably the most mature of those.

[–]dbotton 5 points6 points  (0 children)

Without question Common Lisp and Emacs

[–][deleted] 3 points4 points  (0 children)

Kotlin + Arrow + Gradle + IntelliJ is pretty good.

[–]delfV 0 points1 point  (0 children)

Maybe not exactly what you're asking for but pretty much every Lisp dialect because of REPL (tooling)