It's a bit rough around the edges right now. We might want a custom error type and a few well-placed `cut`s here and there.