<div dir="ltr">On Sat, Apr 27, 2013 at 9:55 AM, David Sheets <span dir="ltr"><<a href="mailto:kosmo.zb@gmail.com" target="_blank">kosmo.zb@gmail.com</a>></span> wrote:<div>[...]<br><div class="gmail_extra"><div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I think the major point of confusion in these discussions is the<br>
result of the framing of the discussion in terms of "flattening". I<br>
believe most beneficial viewpoint is that of "autolifting".<br>
<br>
That is, the exceptional case is not when the function argument of<br>
"then" returns a Future+ that gets "flattened" but rather when the<br>
function argument of "then" returns a non-Future that gets<br>
automatically lifted into a Future.<br>
<br>
This change in perspective is non-obvious because in many of these<br>
APIs there is no succinct lifting operation to make a Future from<br>
another value. This is a major reason why something like Future.of<br>
(Future.accept) is important.</blockquote><div><br></div><div><br></div><div style>I was following you until this last paragraph. As you define autolifting in the first two paragraphs, Q(x) would be an autolifting operation. It has the signature:</div>
<div style><br></div><div style>    promise<t> -> promise<t></div><div style>or</div><div style>    t -> promise<t> // if t is not itself a promise type</div><div style><br></div><div style>Are you distinguishing "autolifting" vs "lifting"? If so, why do you think it is important or desirable to provide a lifting operation (as opposed to an autolifting operation)?</div>
<div> </div></div><div><br></div>-- <br>    Cheers,<br>    --MarkM
</div></div></div>