Re:Functors and Monads for People Who Have Read Too Many “Tu...
by calo_star on Saturday June 26, 2021 @04:35AM
(#27640212)
I find this perspective intriguing, can you elaborate on that? For example why `m a -> (a -> m b) -> m b` but not something else?
Re:Functors and Monads for People Who Have Read Too Many “Tu...
by uryga on Saturday June 26, 2021 @09:32AM
(#27641653)
> why `m a -> (a -> m b) -> m b` but not something else?
it's basically continuation-passing-style (`a -> m b` is the "continuation"), you might as well ask "why can you represent so many control-flow things using CPS?". idk why, but you can!
from another angle, you could compare Monad with the less powerful Applicative. a formulation[0] that's easier to parse than the usual one[1] is:
class Functor f => Applicative f where
unit :: f ()
pair :: f a -> f b -> f (a, b)
if you're familiar with JS Promises, a rough analogy would be >>= (Monad) Promise.then
pair (Applicative) ≈ Promise.all
unit (Applicative) =
return (Monad) = Promise.resolve
ignoring parallelism, you can implement Promise.all using Promise.then, but not the other way around.---
[0] Called "Monoidal" here: https://stackoverflow.com/q/45267953 [1] https://en.m.wikibooks.org/wiki/Haskell/Applicative_functors...
Re:Functors and Monads for People Who Have Read Too Many “Tu...
by lmm on Saturday June 26, 2021 @06:07AM
(#27640642)
Some people describe monads as "programmable semicolons" - they're pretty much the general concept of sequencing, "do this then do that", or indeed of imperative code. I don't think they're necessarily the ideal abstraction - something like ArrowChoice is "better" in a lot of cases - but in practice they seem to come up a hell of a lot, you can represent almost anything as a monad.
Re:Functors and Monads for People Who Have Read Too Many “Tu...
by wyager on Saturday June 26, 2021 @09:16AM
(#27641555)
Why monads and not something else? Because monads appear to be a/the mathematical structure underlying the denotation of programs with effects.
Why that type signature? You only have two options: that, or m (m a) -> m a. The former is more popular for ergonomic reasons mostly. It doesn’t really matter.
If your type system can't express them then you lose most of the advantages and they're pretty pointless.