mth/yeti — pull request #15 by chrisichris (2014-10-13 21:25:49+00:00)
Title: syntactic sugar for bind functions - similar to do notation

Currently there are no new features added to yeti, however once this is over here is a proposal to add syntactic sugar for monad bind similar to Hasekll's do notation.

The attached code rewrites to bind operations node-sequences (Seq):

( f = doFoo();
g <- monadValue; //here starts the rewrite
x = return (g + 1);
mon.h <- x;
return h);

is rewritten to:

(f = doFoo();
bind do g:
x = return (g + 1);
mon.bind do h:
return h;
done
x;
done
monadValue);

The 'bind' function has to be in scope. If the node left to the (<-) is a symbol a plain 'bind' is referenced, if the node left to (<-) is a FieldOp than the left part is evaluted to be a structure for the 'bind' function. This is useful to have different 'bind' functions (ie through named load). The 'field-name' becomes the argument name in the lambda.

The (<-) is only considered for rewrite if it is a direkt child of the squence and the left node ist either a symbol or a field-reference. The lambda always than extends to the end of the sequenze (the subsequence is recusively transformed).