我在haskell中编写了一个函数,它需要一些参数,如Word32,String(忽略压缩)和输出IO Word32。现在,这是一个函数真正意义上的:对于相同的输入,输出始终是相同的。没有副作用。函数返回IO Word32而不是Word32的原因是函数为了计算最终的Word32输出而在一个循环中多次更新多个32位线性反馈移位寄存器(lfsr)和其他寄存器。如何通过隐藏'状态'变化来在没有IO的情况下编写haskell函数
我的问题是:由于此功能实际上有没有副作用,是有可能隐藏功能的实现,使得该函数返回Word32,而不是IO Word32里面那些寄存器更新?如果是这样,怎么样?
是否由FFI导入? – fuz 2011-05-20 15:35:12
我是否正确理解该函数的主体是(部分)写入命令式风格的,并且您使用本地定义的'IORef'来保存LSFR?也许你应该考虑使用'STRef'而不是'ST' monad中运行计算。 – rkhayrov 2011-05-20 15:38:53
你可以发布你的函数的代码吗?也许它应该在IO中摆在首位。 – augustss 2011-05-20 15:50:26