notes on returns
This commit is contained in:
parent
cbbfab2bb0
commit
a1132ae416
1 changed files with 49 additions and 0 deletions
49
20240403221816-returns.org
Normal file
49
20240403221816-returns.org
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 4276e1de-1ac5-4e4d-896c-1601e2e61a4e
|
||||||
|
:END:
|
||||||
|
#+title: Returns
|
||||||
|
|
||||||
|
A library implementing various [[id:8ee5037f-0673-4968-9ec4-184bf31dd72d][Monads]] in [[id:cda9c620-fec5-4549-b979-22fc06819d77][Python]].
|
||||||
|
|
||||||
|
* Benefits
|
||||||
|
** Explicit errors
|
||||||
|
** Composition
|
||||||
|
*** Asynchronous composition
|
||||||
|
* Drawbacks
|
||||||
|
** Learning curve
|
||||||
|
** Formatting call chains in YAPF
|
||||||
|
Call chaining formats poorly in YAPF. Consider the following example which
|
||||||
|
performs the following steps:
|
||||||
|
1. Builds a request object
|
||||||
|
2. Wraps the request object in a Future
|
||||||
|
3. Binds the request to the HTTP send method
|
||||||
|
4. Binds the result to a response handler
|
||||||
|
|
||||||
|
The code, formatted by YAPF, looks like this:
|
||||||
|
|
||||||
|
#+begin_src python
|
||||||
|
return FutureResult.from_result(
|
||||||
|
self.build_request(request)).bind_async(safe_send).bind_result(
|
||||||
|
self.load_response)
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
The same code, formatted instead by the Black formatter, looks like this:
|
||||||
|
|
||||||
|
#+begin_src python
|
||||||
|
return (
|
||||||
|
FutureResult.from_result(self.build_request(request))
|
||||||
|
.bind_async(safe_send)
|
||||||
|
.bind_result(self.load_response)
|
||||||
|
)
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
A workaround is to use the =pointfree= module from =returns=, though this comes
|
||||||
|
with the additional overhead of understanding and using the point-free
|
||||||
|
functions.
|
||||||
|
#+begin_src python
|
||||||
|
return flow(
|
||||||
|
FutureResult.from_result(self.build_request(request)),
|
||||||
|
pointfree.bind_async(safe_send),
|
||||||
|
pointfree.bind_result(self.load_response),
|
||||||
|
)
|
||||||
|
#+end_src
|
Loading…
Reference in a new issue