  While modern software development heavily uses versioned packages,
programming languages rarely support the concept of versions in their
semantics, which makes software updates more bulky and unsafe. This paper
proposes a programming language that intrinsically supports versions. The main
goals are to design core language features to support multiple versions in one
program and establish a proper notion of type safety with those features. The
proposed core calculus, called Lambda VL, has versioned values, each containing
different values under different versions. We show the construction of the type
system as an extension of coeffect calculus by mapping versions to
computational resources. The type system guarantees the existence of a valid
combination of versions for a program. The calculus enables programming
languages to use multiple versions of a package within a program. It will serve
as a basis for designing advanced language features like module systems and
semantic versioning.
