give HaskWeak its own type representation, fix numerous bugs