Whoa. That's a surprising reaction. I think you might be missing something
significant about how async works to think that.
> Sadly, your example does not work for me, even with tweaks, as the most
> important part proc newMyState cannot work, as it couldn't be able to return
> anything else aside from Future[T] or Future[void]
Why is this a problem? The procedure does async operations, so it must return a
future. You can hack around and not do that, but then your procedure becomes
blocking.
> What is even worse: even if that would work it would kind of defeat the
> purpose of wrapping the procedures in the first place, as I wanted to
> simplify them first.
Perhaps it would help if you explained what you are doing at a high level in
some more detail. What are you trying to simplify? Are you writing a library on
top of redis that makes certain operations simpler?
> If I have to do something like waitFor state.rsearch("test") in the final
> code, anyway, then there is no point in wrapping everything.
Again, that procedure performs async operations, so it must return a future. In
a non-async context you have two choices for what to do with a future:
* Block until it completes: `waitFor`
* Let it run in the "background": `asyncCheck`
If you were using this `rsearch` proc inside of another async proc then you'd
be able to `await` it (or also run it in the background via `asyncCheck`).
Please don't give up on async. Making your code synchronous will not get you
far.