Deriving incomplete type class instances
June 21, 2015
Suppose we've got a simple representation of a user:
case class User(id: Long, name: String, email: String)
Now suppose we're writing a web service where we allow clients to post some
JSON to a resource to create a new user. We get to pick the id
, not the client,
so we might accept something like this:
{
"name": "Foo McBar",
"email": "foo@mcbar.com"
}
If we're using a type class-based JSON library like Argonaut, we'll
probably have written a codec instance for User
(or we may be using a library
like argonaut-shapeless that derives instances for our
case classes automatically).
The problem is that our User
codec won't work on JSON like the
example above (since it's missing the id
field).