我需要在 STM 中存储一些值的缓冲区。编写器线程需要监视缓冲区的大小。我开始使用TChan来实现这个东西,但后来我发现 API 没有提供测量通道长度的方法。作为一个固执的人,我自己实现了这个东西:
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) 复杂度,但这不可能是原因,对吧?