discussed with wiz@.
packaged for wip by pho. Haskell 98 phantom types to avoid unsafely passing dummy arguments