I'd rather keep the casts only in the "primitives" `isEmpty` and `get`. All the other methods basically have exactly the same implementation as in `scala.Option`.