STM にいくつかの値のバッファを保存する必要があります。書き込みスレッドは、バッファーのサイズを監視する必要があります。私はTChannelを使用してこのことを実装し始めましたが、API がチャネルの長さを測定する方法を提供していないことがわかりました。1 つの頑固な男であるため、私はそれを自分で実装しました。
readTChanLength ch = do
empty <- isEmptyTChan ch
if empty
then return 0
else do
value <- readTChan ch
length <- readTChanLength ch
unGetTChan ch value
return $ 1 + length
今ではすべて正常に動作していますが、標準ライブラリに実装されていないような些細なことの理由と、そのような問題への好ましいアプローチは何なのか疑問に思っています。このアルゴリズムには少なくとも O(n) の複雑さがあることはわかっていますが、それが理由になることはありませんよね?