Phantom types are a well-known compile-time tool to ensure that
illegal actions (such as attempting to write in a read-only file) are
unrepresentable. In this blog post we introduce poltergeist types: phantom
types whose parameters may still knock around at runtime.