dry-python / dry-python/returns

Motivation behind not being able to get IO's content, and IO-wrapped interfacing with unwrapped (normal) code

未關閉
#445 2 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視
主要語言
Python
星號
4.4k
分支
155
平均合併
2 小時 27 分鐘
30 天內合併 PR
22

描述

Hi! Question(s) on `IO`.

I am trying to write a little wrapper for some stateful operation (imagine I have to do IO from/to a file), and I found out that `IO` containers are designed to hide their content. It's impossible to get the value of, say, a successful read result (nothing like `IOSuccess.unwrap()`), unless one uses `unsafe_perform_io`.

What is the rationale behind this design? I am asking because I am not familiar with writing typed functional code, and I could not find a motivation in the documentation for why it shouldn't be possible to get the raw content of an `IO` container.

---

Second question related to interface between IO-wrapped code and normal "unsafe" code:

Let's say I am writing code A where want to mark and wrap all IO operations. Now, code A has to interface with standard python code B. What choices do I have to make them talk?

Do I have to unwrap all my operations with `unsafe_perform_io`, in case I want to do something simple like getting a string from my wrapped code? Do I have to rewrite code B by making it all safe and IO-wrapped, so that they can communicate with no "unsafe" bridge between them?

It seems that in such scenario I would end up with code pieces that are of "different colors" - using the usual async-vs-sync metaphore of incompatible red and blue code -, and I would be forced to make everything of the same color.

(Here "red code" = "python code written in railway style" and "blue code" = "standard procedural python code").

貢獻指南

開啟貢獻指南

研究方向

從 issue 中提到的文件和 IO 相關進入點開始,尤其是 unsafe_perform_io,以及包裝的 Python 程式碼與標準 Python 程式碼之間的區別。釐清隱藏 IO 內容的理由,並記錄 IO 包裝操作與一般 Python 程式碼之間受支援的界線。

由索引模型根據 Issue 內容生成。

評估

技術堆疊
python
領域
backend
Issue 類型
文件
難度
5/5
預估耗時
一週以上
活躍度
停滯
描述清晰度
需要釐清
新手友好度
25/100

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。