5 ms·
The identity monad's sequencing is just basic cause and effect: you need to have produced an `a` in order to get a `b`. The sequencing is very obvious from the
by tree_of_item 9y ago
The identity monad's sequencing is just basic cause and effect: you need to have produced an `a` in order to get a `b`.
The sequencing is very obvious from the signature of `>>=`. You don't need to know anything about any instances to see that it's there.
- tome 9y ago> The identity monad's sequencing is just basic cause and effect: you need to have produced an `a` in order to get a `b`. You most certainly do not! See https://news.ycombinator.com/item?id=16420742 https://news.ycombinator.com/item?id=16420742
- tree_of_item 9y agoIt's in the signature. `b` has a causal dependency on `a` because `a` is on the left hand side of the arrow and `b` is on the right hand side of the arrow. That's it. Functional programming 101. There's no way around this. The operational semantics and details of thunks are not relevant here. Tricks with `undefined` are not relevant here. This is just the meaning of the arrow type.
- pdpi 9y agoIf that were true, why do you need a monad for sequencing? Why doesn’t function composition suffice, or something of the form a -> (a -> b) -> b?
- tree_of_item 9y agoBecause the values have extra "stuff" surrounding them. That's why it's `m a` and not just `a`: the `m` holds the invisible context that enriches the `a`. Although your example is exactly what's happening in the identity monad, because there is no extra stuff.
- gowld 9y agoMonads have been called "executable semicolons", because you can define a function to be executed each time the program passes from one statement to the next.