got the '(encode . decode) == id' requirement solved for (EncodeST . DecodeST), but encoding doesn't seem to run that much faster. Not a huge surprise, but a little disappointing. TODO: figure out what's blowing up the stack in both ST methods, solve the weird bug that's causing worse compression rates ('encode "hello there friend"' doesn't return correct output, but it still works with decode.), and figure out what's causing what seems to be a memory leak in EncodeST. Memory usage could stand to go down on both sides, but DecodeST stays nicely under a gig no matter the input, so that's acceptable.