@abcdw Yeah, I am a huge fan of #Scheme and #Guile, but I unfortunately have almost no opportunity to use it. I use #Haskell for most everything. If Scheme had a Haskell-like (System-F) type system, I could probably convert most of my Haskell code over to Scheme and use Guile exclusively.
What I love about Scheme is that it is so minimal. It seems to has found that sweet-spot between the very mathematical and abstract Untyped Lambda Calculus and an actual practical programming language that you can use to do real #software #engineering.
One thing it lacks is a consistent implementation, and this is where #CommonLisp tends to win out. But Guile actually implements most all of the features specified in the Common Lisp standard, and so do a few other mainstream schemes like Chez. So nowadays, I personally believe there is more reason to use Scheme than Common Lisp if you are starting a new project from scratch.
The features of System-F do exist for Scheme here in there in various forms, in particular a Hindley-Milner type checker with Algebraic Data Types like Haskell or #Ocaml. Alexis King has developed "Hackett" which is a Haskell-like Lisp implemented as a #Racket EDSL. Common Lisp has Coalton, which is very a recent development and very Haskell-like. There is also PreScheme, but it is somewhat restrictive (e.g. no clojures).
Scheme has #Prolog-like system you can import called "MiniKanren", which is nearly identical to the clojure/core.logic module, but this is fully-dependently typed Calculus of Constructs, not System-F, so much harder to use in practice (in my experience). I hope Alexis King ports her Hackett to Scheme. I would do it on my own even, if I had more free time.
- https://coalton-lang.github.io/20211010-introducing-coalton/
- https://lexi-lambda.github.io/hackett/
- http://minikanren.org/
- https://clojure.github.io/core.logic/
- https://groups.scheme.org/prescheme/1.3/
@ramin_hal9001 I saw a few attempts of typetizing lisps: Typed Racket, Typed Clojure, clojure.spec/malli, Carp and probably much more, but still not faced something that really shines. I learn haskell and related literature right now, so I hope to get a better feeling of good type system to be able to assess such tool or maybe even implement my own.