I have a question about concept of monad used in Haskell programming and category theory in math.
Recall in Haskell a monad consists of following components:
A type constructor that defines for each underlying type how the corresponding monad type is to be obtained. The name of this type constructor is often used synonymously with the whole monad. If $M$ is the name of the monad and $t$ is arbitrary fixed data type, then $M t$ is the corresponding monadic type
A unit function that maps a value of the underlying type to the value of the corresponding monad type. The result is the "simplest" value in the corresponding type that can be obtained from the original value. In Haskell this function is called return. The unit function has the polymorphic type $t → M t$
At least one further operation, which describes the combination of monadic operations.
On the other hand in category theory a monad is a triple $(T, \eta, \mu)$ of a category $C$ where
$T: C \to C$ is a functor
$\eta: 1_K \to T$ a natural transformation in sense of category theory
$\mu: T^2 \to T$ a natural transformation
and these objects should satisfy following diagrams: https://en.wikipedia.org/wiki/Monad_(category_theory)
Question: How are these monads from Haskell and abstract category theory related? Does the monad structure in Haskell have natural "monad structure" in sense of category theory, ie we can canonically associate to $M$ a canonical triple as described above?