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. We prove bisimilarity is a congruence using Howe's method. Next, we define a metalanguage M in which we may give a denotational semantics to O. M generalises Crole and Pitts ' FIX-logic by adding in a parameterised recursive datatype, which is used to model I/O. M comes equipped both with an operational semantics and a domain-theoretic semantics in the category CPPO of cppos (bottom-pointed posets with joins of!-chains) and Scott continuous functions. We use the CPPO semantics to prove that M is computationally adequate for the operational semantics using formal approximation relations. The existence of such relations is based on recent work of Pitts [Pit94b] for untyped languages, and uses the idea of minimal invariant objects due to Freyd. A monadic-style textual translation into M induces a denotational semantics on O. Our final result validates the denotational semantics: if the denotations of two O programs are equal then the O programs are in fact operationally equivalent.