My first language was Racket and so naturally I gravitated to the lispy untyped functional programming style even when I was using languages like Python or Java, but when I tried Haskell for the first time my mind was absolutely blown and I was a convert ever since. What are your thoughts?
Nowadays, I definitely prefer typed. There was a time I really liked untyped (e.g. Lisp), because I felt so much freedom compared to the (rather simple) typed languages I had used. Then I learned Haskell and found out that types were not the problem, but that the type systems I had used until then were simply not expressive enough for what I wanted to do.
Exactly the same here. 10+ years ago, untyped languages felt so much more productive; they were a breath of fresh air compared to e.g. Java. But after discovering typed languages with type inferencing (Haskell) and nowadays gradually typed languages, I cannot work without types anymore. It feels icky to not have a compiler check types.
I like statically typed languages more than untyped, however the more I get into strict typing it just seems like compile time predicates/asserts. which is something you can use in a lot of languages to get strict typing. I mainly use Common Lisp and it has several things built in like DEFTYPE and you can create predicates to specify a type. though obviously not mandatory it can be quite nice. so I guess at the moment I am more in the middle I use types when they seem useful and dont when I am in a hurry or they are not needed.
I like the typing system of OCaml but I also like the fact that typing systems are optional in the lisps (Typed Racket, Typed Clojure, the CLOS…)
My personal preference is (not only constraint to functional programming): untyped language for small-medium projects, typed language for slightly bigger/enterprise projects.
I also started my FP journey with untyped languages. Finding Haskell changed my perspective because it answered questions I hadn’t yet been able to clearly articulate to myself.
That said, I do sympathize with the criticism that static types can make some things harder to use. I think it’s because we’re not yet doing everything right, but the reality is that some, say, Python APIs are faster to get going with than comparable things in Haskell.