Re:Does category theory make you a better programmer?
by sznurek on Tuesday July 31, 2012 @01:03AM
(#4315810)
I wrote 'monad-inspired' structure because of lack of syntactic sugar (do notation). So it basically looks like that:
login_action = Write('PASS') >> \
Read('pass') >> \
Guard(lambda v: v['pass'] == 'mysecret') >> \
Write('WELCOME')
register(socket, login_action, on_success=func1, on_error=func2)
Of course you can develop this idea futher: cat = Read('line') >> Write(lambda v: v['line'])
cat.append_action(cat)
register(socket, cat, on_error=handle_error_cb)
They do stuff like this in jQuery, so I can't imagine it's all that difficult in Python.
My initial thought would be to write something analogous to Maybe. You can't pattern match in Python, which is a shame, but you could make it so that foo.bar().baz().quux() will return MaybeResult, which everything involved in the transaction inherits from. MaybeResult might have a "success" variable on it indicating whether it ought to be treated as Nothing. Otherwise, check "result."
This is naive but it gets you a little bit closer to fault-tolerant chaining of interdependent methods. Not as nice as Haskell, obvs. :)