Hacker News new | past | comments | ask | show | jobs | submit login

There are also clojure and scala with java integration which are cross platform.



yes, they are functional, but they are not "Haskell relatives" at all... Clojure is a Lisp (and I still have some reluctance imagining it being effectively used in a team of more than 3 programmers with more than 10 points IQ difference between them...) ...and Scala is a "weird beast" - I dunno, but the "businessy" side of my mind tells me it's far from a silver bullet and may end up being too "complicated" for the problems I need to solve, and I don't like it when the tools I'm using are more complex than the problems I'm solving...


In practice, I'm not seeing it as a problem. It's a bit like C++ in that you can safely ignore all but a subset of the functionality. The problem is that everyone picks a different subset. :)

I'd say the compiler speed is still the biggest problem, and they're working on it.


You joke, but Scala's complexity is a very real problem. Specifically, abuse of implicits can make trying to understand Other People's Code quite the nightmare. Even reading the function type specifications in the official Scala docs is a chore.


Okay, I'll agree about implicit abuse. I feel like reading the function types is something I will eventually feel more comfortable with, as if it's my fault for picking a language with both the power and static typing. And I haven't figured out a better way to do it myself.


I would argue Haskell is more powerful than Scala, and also more readable, for the most part.

You can certainly find examples of unreadable Haskell, specifically in the vicinity of ivory towers — there must be something in the air up there which makes academics fond of operator line noise. However, compare the following Scala [1]:

    implicit def KleisliCategory[M[_]: Monad]: Category[({type λ[α, β]=Kleisli[M, α, β]})#λ] = new Category[({type λ[α, β]=Kleisli[M, α, β]})#λ] {
      def id[A] = ☆(_ η)
      def compose[X, Y, Z](f: Kleisli[M, Y, Z], g: Kleisli[M, X, Y]) = f <=< g
    }
…and Haskell [2]:

    newtype Kleisli m a b = Kleisli { runKleisli :: a -> m b }

    instance Monad m => Category (Kleisli m) where
      id = Kleisli return
      (Kleisli f) . (Kleisli g) = Kleisli (\b -> g b >>= f)
[1]: https://github.com/scalaz/scalaz/blob/master/core/src/main/s...

[2]: https://github.com/ghc/packages-base/blob/master/Control/Arr...


Haskell is a lisp.

(With unconventional syntax admittedly)

Linked list as primary data structure? Check Functional? Check Macros? Check (Implemented as normal functions, since with lazyness you don't actually need macros for control-structure type constructs)


"has X so you don't need macros" is not equivalent to "has macros" (otherwise nearly every language could claim to be "a lisp.")


But this isn't "because of X".

Anything you can write as a macro in lisp you can write as a normal function in haskell, without special gymnastics.


Not quite everything. Macros can define new types, for example.


...hmmm, never thought of normal function being like macros because of laziness :)




Join us for AI Startup School this June 16-17 in San Francisco!

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: