Generally speaking, here's what you might do:
Instead of Task.toMaybe you would call Task.toResult.
Then, your `NewJson` type, instead of this:
NewJson (Maybe (List Item))
would now be something like this:
NewJson (Result Http.Error (List Item))
Then, in your update method, you'd pattern match on NewJson.
If it's a Result.Ok, then update the items (as you do now), and do something else to the Model which will become apparent in a moment.
If it's a Result.Err, then you would need to be storing the Http.Error in the Model. So, your Model would need that ... it might be a new field, or you might turn isFetching into an ADT that reflects multiple possible status values.
And, of course, the Result.Ok case would now also need to deal with the Http.Error in the Model. (So, the model field might need to be Maybe Http.Error, so you can set it to Nothing when things worked. Or, if you're using a Status ADT, then you'd set the appropriate Status).
Then, in your view, you would need to check for the Http.Error in the model, and then display it somehow.
That's more or less what you'd do -- I'm just writing this off the top of my head, so I may be missing bits.