Use a dependent type.
Fix up the tests a few different ways.

Can't compare Optional[Foo] to Foo and expect it "shouldBe" equal.
Merge pull request #1 from paulp/paulp

All tests pass.