In certain cases, it may be useful to quickly ascertain why a Record wasn't obtained, rather than just having Nothing. So instead of just:
getAll :: forall option record. GetAll option record => Option option -> Maybe (Record record)
It may be useful to have something like:
getAllWithError :: forall option record. GetAll option record => Option option -> Either (Tree String) (Record record)
In this case, the Left Tree would ideally be a sort of "stack trace" (except it is an Option trace here) that includes the fields that were absent. Here's an example mockup (if I've got this right):
type Inner = Option.Record ( reqInner :: String ) ( optInner :: Number)
type Outer = Option.Record ( reqOuter :: Inner ) ( optOuter :: String )
If getAllWithError was called on Option.Empty, it would ideally return something like Left (Node { children : [Node {children: [], value: "reqInner"}], value : "reqOuter" }.