// must be overloaded
template<template<typename> class M,typename T,typename F>
auto operator>>=(const M<T>& m, F f)->decltype(f(std::declval<const T>()));
Could someone please point out to me why exactly this is useful and why I would want to code like this? Does it help me solve specific types of problems?
Monads are originally a solution to giving semantics to i/o, exceptions, and other things that fall under the generic headline of side-effecting computations. I'm not sure what value you get out of it when your language isn't Haskell. Here's the paper that started it all: http://www.cs.cmu.edu/afs/cs/user/crary/www/819-f09/Moggi91.....
Eh, when you're doing writing rather than coding, sometimes it's hard to be more descriptive than "added more text." I have a few repositories where I don't care much about the "logic" of the history, but I just want things versioned. (e.g. a folder full of text files with random ideas jotted down.) My commit commands tend to look like,