| Haskell is a much more complicated language than Ocaml: - Laziness can be hard to reason about for newcomers who have really only had experience with strictness - You have to learn a lot of concepts from category theory right off the bat, because it uses IO and monads. You need to know what a monad is, and almost all monad tutorials are notoriously bad at explaining what a monad is. You also don't know when to stop, when you've learned 'enough' category theory - The community is full of clever tricks and idioms that aren't really necessary to write haskell code, but a beginner might think they need to know it. Examples: monad transformers, free monads, comonads, lenses, coroutines - The type system is substantially more complex. Haskell has higher kinded polymorphism, rank-n-types, and a neverending set of extensions that a lot of haskellers use that'll keep you busy learning the rest of your life. Haskell code can also be very polymoprhic, and the type errors can be really confusing sometimes. Ocaml doesn't have these, but you can simulate the most important features: higher kinded polymorphism with functors, and rank-n-types with records That's why Ocaml is easier to learn and use |
Yes
> - You have to learn a lot of concepts from category theory right off the bat, because it uses IO and monads.
No - in particular, you don't have to understand monads to use the IO monad. You just have to understand the IO monad API. That's pretty similar to not having to understand how motors work in order to drive a car.
> - The community is full of clever tricks and idioms that aren't really necessary to write haskell code, but a beginner might think they need to know it.
Yes, and that's the major mistake people may do when starting Haskell. You don't need (and you probably can't) know everything you read about in order to be efficient in Haskell. Just use the simple stuff and live the happy life.
> - The type system is substantially more complex.
Yes, but it shouldn't be a problem. See point above, learn only what you want/need and live the happy life.
(also, Ocaml is an amazing language. It's fine if you enjoy it and don't enjoy Haskell)