I would like to add my response here alongside the esteemed answer provided by @Remy Lebeau above.
another solution using the Undoc Default in system unit:
class function TMaybe<T>.FromValue(aValue: T): TMaybe<T>;
begin
if aValue <> Default(T) then
begin
Result := TMaybe<T>.Some(aValue);
end else
begin
Result := TMaybe<T>.None;
end;
end;