Escribí una función en haskell que toma algunos parámetros como Word32, String (ignorar currying) y salidas IO Word32. Ahora, esta es una función en el verdadero sentido: para las mismas entradas, la salida siempre será la misma. No hay efectos secundarios. La razón por la que la función devuelve IO Word32 en lugar de Word32 es que la función actualiza muchos registros de desplazamiento lineal de 32 bits (lfsr) y otros registros varias veces en un bucle para calcular la salida final de Word32.Cómo escribir una función haskell sin IO en tipo sig ocultando cambios de 'estado'
Mi pregunta es esta: Dado que esta función efectivamente no tiene efectos secundarios, ¿es posible ocultar esas actualizaciones de registro dentro de la implementación de la función para que la función devuelva Word32 y no IO Word32? ¿Si es así, cómo?
¿Es importado por la FFI? – fuz
¿Entiendo correctamente que el cuerpo de la función se escribe (parcialmente) en el estilo imperativo y se usa 'IORef's definido localmente para contener los LSFR? Tal vez deberías considerar usar 'STRef' en su lugar y ejecutar el cálculo dentro de una mónada' ST'. – rkhayrov
¿Podría publicar el código para su función? Quizás debería estar en IO en primer lugar. – augustss