Lets talk about Haskell

i'll write it in terms of C++ types:
okay so you have some kind of container type foo and you have a function that accepts an unrapped variable and returns a new one inside that container (the signature will be foo fun(T))

in the simplest terms, fun is a monad if you can define some kind of apply operator that accepts an argument of type foo, unwraps it, and passes it through fun to get another foo out the end (instead of e.g. foo)

there are some other mathematical laws it has to follow as well but that's the basic idea to wrap your head around

>I refuse to give programming a try until I can hear 1 fucking half-competent explanation of what the FUCK void (*)(void*) is
That's how you sound. Try explaining it to somebody who has never programmed. But I'll try to dumb it down for you anyway: monads are algebraic structures (replace these two words with "things" if it irks you) that can be used to represent sequences of things. Like sequences of input/output actions. That's it. You get (for a given monad m:
bind :: m a -> (a -> m b) -> m b

to sequence an action m a (action with result value a)with a following action a -> m b (action that takes a as input and outputs b. The result of the whole sequence is obviously an action that returns b.
You also get return :: a -> m a which is an action that simply returns its input.

>My biggest gripe with Haskell however, is that you don't actually learn the language, you learn the library that you are using.
Good point, OP. DSLs suck.

I almost understand this except I don't

I also love Haskell, I'm currently at that point when you can already write Haskell, you have done all the toy programs in the book, but I just can't with most libraries external libraries yet, everything feels like a rabbit hole.

Like you mentioned, there seems to be a big problem of standardization in haskell, everything feels too opinionated. There is no "Haskell way" to do things, which is both blessing and a curse.

>cabal is the worst packaging system ever imagined
Yes, that is why you should only use it as a building tool. Use nix as a package manager. This meme "every fucking language NEEDs (because muh ecosystem) it's own fucking package manager incompatble with other languages" needs to die.

>relying on the garbage that your bistro ships for development
no

>lenses, some use StateT, some use EitherT, some use ReaderT, some use WriterT, some use ExceptT
These are all different concepts for different things. You can't use EitherT in a place for ReaderT. OP is just retarded and doesn't know what he is talking about.

Here you go senpai:

dev.stephendiehl.com/hask/#eightfold-path-to-monad-satori

>>relying on the garbage that your bistro ships for development
excuse me, what? can someone translate that