I just showed this to someone and they commented that they would have no idea how to use this interface just by looking at this.  The problem is that the phantom types reverse the arguments as you read them, so the reader has to parse the line right-to-left.   The more explicit interface, on the other hand, makes it really obvious how to use the function even though there's some cut-and-paste in the signature.