int chunksize = 4096;
using (var r = new BinaryReader(File.OpenRead("infile")))
using (var w = new BinaryWriter(File.OpenWrite("outfile")))
for (var buffer = r.ReadBytes(chunksize); buffer.Length > 0; buffer = r.ReadBytes(chunksize))
w.Write(Array.ConvertAll(buffer, p => (byte) ~p));
I think the habit of using quite a few operators in Haskell does make the learning curve steeper.
I am not trying to say that the C# code is better. Just that the Haskell code is not terribly short in this case and it can be a bit cryptic for a newbie.
Best,
Ozgur