Yes, I was thinking something similar yesterday. Such a pattern might well be perfect.
On Nov 14, 2011, at 11:40 PM, David Rajchenbach-Teller wrote: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > On 11/15/11 12:47 AM, Niko Matsakis wrote: >> >> On Nov 14, 2011, at 12:53 PM, Brian Anderson wrote: >> >>> std has a 'result::t<T, U>' type that I am trying to use for this >>> purpose. std::io makes use of this now. >> >> Besides exceptions, I do not have a better alternative than >> `std::result`. However, I fear that if we go too far down this >> style, it will very painful and we will find ourselves wishing for >> syntactic sugar to support chaining (whether that is monads or >> something else). At least this has been my experience when working >> in OCaml. >> >> Are we sure that we do not want exceptions? > > Actually, since we have `ret`, I'm sure that we can have small > syntactic sugar without resorting to monads. > > Assuming we have, > > foo(x: str) -> result::t<T, U> { ... } > > We could write > > let x = #result[foo(y)] > > And expand it to > > let x = { > let __result = foo(y); > alt(__result) { > ok(z) { z } > err(_){ > //Possibly add some logging here > ret __result > } > } > } > > In practice, this is already what happens in mozilla-central. Not > ideal, but probably easier to sell to non-fp users as monads, and it > takes advantage of `ret`. I wonder about performance, though. Is there > a way that the compiler could recognize this pattern and somehow > optimize it to attain the same kind of performance as exceptions? > > Cheers, > David > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v1.4.11 (Darwin) > > iQEcBAEBAgAGBQJOwhdqAAoJED+FkPgNe9W+AMoH/i5scrjiLO2tyscpUcrc3+x5 > 682VB3aoKN30ddmZDWMbtFSDTMpRERfoNWlNIYtkL0fB5jnw+jyVibPIHzEzArsd > p+VlXLicPizWHywvIKsNcIkJs2kcQOVP/GQ8BM3XccvnU4I17mYBRWWHsNLtQEFG > YVNmHplLp3bSFORST+R9ZxG+ToTzmhPWCDWmqJECJnSkTj4owlyKd223XyqgYacG > NV9eZFbfTTV94m7hgu9shSIWzfbV7KG2JLbGzMCFT1wb8AK6+uZvQohjXbAe+u9G > yk6KGaoF4JDo02osH/cf9CY1t23sOBAHfzTfb8BKjnHF+pce6LrYa5gZTWGZ9c4= > =87nd > -----END PGP SIGNATURE----- > _______________________________________________ Rust-dev mailing list Rust-dev@mozilla.org https://mail.mozilla.org/listinfo/rust-dev