function Option.OrElse(f,v)if f:IsSome()then return f else local f=v()Option.Assert(f)return f end end

function Option:OrElse(orElseFn)
	if self:IsSome() then
		return self
	else
		local result = orElseFn()
		Option.Assert(result)
		return result
	end
end
