4 ms·
Sorry, I don't understand your notation. To me a monad is defined by two functions, pure and bind (aka flatMap). I don't understand how — × M corresponds to thi
by noelwelsh 7y ago
Sorry, I don't understand your notation. To me a monad is defined by two functions, pure and bind (aka flatMap). I don't understand how — × M corresponds to this.
- tome 7y ago— × M is the functor. In Haskell it would generally be used as "Writer M", but (M,) can also be used.
- noelwelsh 7y agoSorry, that doesn't help. I literally do not understand the notation. I do not know what — means in this context, I don't understand what role × plays here, etc.
- tome 7y ago"—" means "the parameter of the type constructor goes here". I believe in Scala you use underscore for this, at the value level at least. "×" is what mathematicians call the type constructor for the usual product type. In Haskell this is called (,). I don't know what it's called in Scala. So, — × M means something like "type T a = T a M", in Haskell notation.
- edflsafoiewq 7y agoIn your notation it would be something like final case class Mon[A](v: A, m: M) { def flatMap[B](f: A => Mon[B]): Mon[B] = Mon(f(this.v).v, f(this.v).m * this.m) // * is M's binary operation } object Mon { def pure(v: A): Mon[A] = Mon(v, M.unit) // M.unit is M's identity element }