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?
[ Parent
| on HN ]
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.