我在 haskell 中编写了一个函数,它接受一些参数,如 Word32、String(忽略柯里化)并输出 IO Word32。现在,这是一个真正意义上的函数:对于相同的输入,输出总是相同的。没有副作用。该函数返回 IO Word32 而不是 Word32 的原因是该函数在一个循环中多次更新许多 32 位线性反馈移位寄存器 (lfsr) 和其他寄存器,以计算最终的 Word32 输出。
我的问题是:鉴于此函数实际上没有副作用,是否可以在函数实现中隐藏这些寄存器更新,以便函数返回 Word32 而不是 IO Word32?如果是这样,怎么做?