Os arquivos binários de leitura / gravação Haskell completam o exemplo de trabalho

Gostaria que alguém desse um código de trabalho completo que permita o seguinte em Haskell:

Leia uma sequência muito grande (mais de 1 bilhão de elementos) de valores int de 32 bits de um arquivo binário em um contêiner apropriado (por exemplo, certamente não é uma lista, por problemas de desempenho) e dobre cada número se for menor que 1000 (decimal) e em seguida, grave os valores int de 32 bits resultantes em outro arquivo binário. Talvez eu não queira ler todo o conteúdo do arquivo binário na memória de uma só vez. Eu quero ler um pedaço depois do anterior.

Estou confuso porque pude encontrar muito pouca documentação sobre isso. Data.Binary, ByteString, Word8 e o que não é, apenas aumenta a confusão. Há uma solução bastante direta para esses problemas no C / C ++. Pegue uma matriz (por exemplo, de int não assinado) do tamanho desejado e use as chamadas da biblioteca de leitura / gravação e pronto. Em Haskell, não parecia tão fácil, pelo menos para mim.

Eu gostaria que sua solução usasse o melhor possívelpadrão pacotes que estão disponíveis com o Haskell convencional (> GHC 7.10) e não alguns obscuros / obsoletos.

Eu li nestas páginas

https://wiki.haskell.org/Binary_IO

https://wiki.haskell.org/Dealing_with_binary_data

questionAnswers(3)

yourAnswerToTheQuestion