
I think I've come across a bug in the (==) function of PackedString, but it's hard to reproduce. I'm attaching a set of files that hopefully will reproduce the problem. My assumption is that if two packed strings are unequal, then when their unpacked versions must also be equal. This is, of course, assuming one starts with the packed versions, since packing of strings may be lossy...
This does appear to be a bug in the PackedString library. It appears that hGetPS doesn't zero-terminate the string, but the comparison code expects the strings to be zero-terminated. I'm not sure who's at fault here. The right fix is to use Data.PackedString instead of PackedString (no package lang required). Data.PackedString is a complete re-implementation and doesn't suffer from the bug you reported (that's not to say it doesn't have different bugs though!). Cheers, Simon