Haskell jest najbardziej związany z rodziną języków ML. Dotyczy to oczywiście OCaml , ale także F # na platformie .NET. Języki te dzielą z Haskell podstawę systemu typów i sposób wykorzystania danych - algebraiczne typy danych, dopasowanie wzorców, wnioskowanie typów itp. Oczywiście mogą się znacznie różnić od Haskell w innych punktach - większość ML jest surowa i nieczysta , a na początku popularność Haskell jako narzędzia do badań nad systemami typów i projektowania języków oznacza, że większość języków w stylu ML ma zwykle słabsze (ale potencjalnie łatwiejsze do zrozumienia) systemy typów. Prawdopodobnie bezpiecznie jest powiedzieć, że możesz przegapićpewne rzeczy na temat Haskell, szczególnie na początku, większość programistów Haskell prawdopodobnie szybko poczuje się komfortowo w domu w ML, na podstawowym poziomie rzeczy do zrobienia. Jeśli chcesz języka o tej samej ogólnej strukturze co Haskell, ML jest najlepszym wyborem.
Funkcjonalna strona Scaliczerpie także mocno z tradycji ML, a także wprowadza zaawansowane funkcje systemu typowego znane z Haskell, a także bardziej standardowy system OOP zintegrowany z powyższym. Podczas gdy OO w językach w stylu ML jest zwykle traktowane jako „modelowy OO z podstawowymi narzędziami funkcjonalnymi” Scala żyje i oddycha OO w stylu Java. Jest to korzystne dla interakcji Java, jak można sobie wyobrazić, i oferuje bardziej znane środowisko pracy dla programistów OO. Jednak, pochodząc z tła Haskell, bardziej prawdopodobne jest, że zirytujesz się sposobami, w których mieszanie rzeczy w Scali sprawia, że funkcjonalne idiomy są nieporadne, a większość API Java jest źle zaprojektowana i niepotrzebnie trudna w użyciu.
Wreszcie, chociaż wydaje się to dziwne, Clojure ma wiele rzeczy wspólnych z Haskellem na bardziej filozoficznym poziomie. Większość tego, co znajdziesz w podejściu Clojure do stanu i wartości vs. tożsamości, jest bardzo zbliżona duchem do tego, co Haskell formalizuje poprzez system typów. Odpowiednio, Clojure w mniejszym stopniu kładzie nacisk na interakcję Java i nie martwi się tak bardzo o przeciąganie w OOP, więc w pewnym sensie podejście Clojure do samego programowania funkcjonalnego może być najbliższe temu, co już znasz. Myślę, że mówi w tym względzie, że o ile mi wiadomo, Clojure jest jedynym językiem oprócz Haskell, który ma implementację STMto proste, skuteczne i po prostu działa. Z drugiej strony Clojure wywodzi się z tradycji Lisp, a zatem brakuje mu statycznego systemu typów i nacisku na algebraiczne typy danych i dopasowanie wzorców występujące w językach wpływających na ML. I oczywiście jest to Lisp, co samo w sobie jest negatywne dla niektórych osób (choć tak naprawdę nie wiem dlaczego).
Mówiąc za siebie, z zastrzeżeniem, że moje pierwsze doświadczenie z programowaniem funkcjonalnym było w Scheme, prawdopodobnie skłaniam się ku Clojure, z OCaml prawdopodobnie drugim wyborem.
Nigdy nie korzystałem z niego osobiście, ale czasami widzę, jak Scala pojawia się na blogach lub w opisach projektów, i sądzę, że Haskell potrzebował ważnych pomysłów. Scala kompiluje się do JVM i może współpracować z Javą.
źródło
Funkcjonalną alternatywą jest Erlang . Chociaż jest to język bardzo współbieżny, sekwencyjny podzbiór jest językiem czysto funkcjonalnym z wieloma właściwościami języków funkcjonalnych, na przykład zamknięciami, niezmiennymi danymi i dopasowaniem wzorców. Działa na wielu platformach, w tym Linux, różnych unixach, Windowsach i Macosxie. Teraz jest nawet implementacja JVM, erjang . Może łatwo komunikować się i współistnieć z innymi językami, w ten sposób jest często używany.
Sprawdź stronę główną .
źródło
Clojure jest coraz szerzej stosowany i choć na powierzchni nie wygląda jak Haskell, jeśli spojrzysz trochę głębiej, wyraźnie inspiruje go Haskell i zachęca do bardzo podobnego stylu funkcjonalnego.
Kluczowe funkcje Clojure, które użytkownicy Haskell mogą uznać za znajome i przekonujące:
Kluczowe różnice (mogą być dodatnie lub ujemne w zależności od twojej perspektywy):
Perspektywa osobista: nauczyłem się Haskella przed Clojure i kochałem Haskell za jego elegancję i matematyczną czystość. Clojure czerpie wiele inspiracji i pożycza wiele dobrych funkcji od Haskella, ale jest znacznie bardziej pragmatyczny / praktyczny. Zwłaszcza gdy liczy się ogromna wartość możliwości wykorzystania ekosystemu biblioteki Java, jest to świetny język do „robienia rzeczy”.
źródło
Jeśli podoba Ci się Haskell, ale musisz napisać kod dla JVM, frege może być dla ciebie interesujący. Został zaprojektowany tak, aby być jak najbliżej Haskell 2010, ale generuje kod Java.
Oczywiście samo frege nie jest niczym „powszechnie używanym językiem produkcyjnym” (został niedawno opublikowany), ale Java jest z pewnością.
źródło