I'd rather take `CachedHttpResponse` out of the `HttpResponse` hierarchy, and have `bodyAs[T]` return a `CachedHttpResponse[T]`, which lazyily evaluates and caches the `Result[T]`. doing so will separate the parsing and decoding logic (I assume you're going to cache the result of `parse(bodyString(charset))`) and will enable type-safe caching for decoded objects, so that the `.asInstanceOf[T]` call is no longer necessary