We study the longstanding problem of semantics for input/output (I/O) expressed using side-effects. Our vehicle is a small higher-order imperative language, with operations for interactive character I/O and based on ML syntax. Unlike previous theories, we present both operational and denotational semantics for I/O effects. We use a novel labelled transition system that uniformly expresses both applicative and imperative computation. We make a standard definition of bisimilarity and prove bisimilarity is a congruence using Howe’s method.

Next, we define a metalanguage [Mscr ] in which we may give a denotational semantics to [Oscr ]. [Mscr ] generalises Crole and Pitts’ FIX-logic by adding in a parameterised recursive datatype, which is used to model I/O. [Mscr ] comes equipped both with an operational semantics and a domain-theoretic semantics in the category [Cscr ][Pscr ][Pscr ][Oscr ] of cppos (bottom-pointed posets with joins of ω-chains) and Scott continuous functions. We use the [Cscr ][Pscr ][Pscr ][Oscr ] semantics to prove that [Mscr ] is computationally adequate for the operational semantics using formal approximation relations. The existence of such relations is based on recent work of Pitts (Pitts 1994b) for untyped languages, and uses the idea of minimal invariant objects due to Freyd.

A monadic-style textual translation into [Mscr ] induces a denotational semantics on [Oscr ]. Our final result validates the denotational semantics: if the denotations of two [Oscr ] programs are equal, then the [Oscr ] programs are in fact operationally equivalent.