3 research outputs found

    FUNDIO: a lambda-calculus with letrec, case, constructors, and an IO-interface : approaching a theory of unsafePerformIO

    Get PDF
    This paper proposes a non-standard way to combine lazy functional languages with I/O. In order to demonstrate the usefulness of the approach, a tiny lazy functional core language FUNDIO , which is also a call-by-need lambda calculus, is investigated. The syntax of FUNDIO has case, letrec, constructors and an IO-interface: its operational semantics is described by small-step reductions. A contextual approximation and equivalence depending on the input-output behavior of normal order reduction sequences is defined and a context lemma is proved. This enables to study a semantics of FUNDIO and its semantic properties. The paper demonstrates that the technique of complete reduction diagrams enables to show a considerable set of program transformations to be correct. Several optimizations of evaluation are given, including strictness optimizations and an abstract machine, and shown to be correct w.r.t. contextual equivalence. Correctness of strictness optimizations also justifies correctness of parallel evaluation. Thus this calculus has a potential to integrate non-strict functional programming with a non-deterministic approach to input-output and also to provide a useful semantics for this combination. It is argued that monadic IO and unsafePerformIO can be combined in Haskell, and that the result is reliable, if all reductions and transformations are correct w.r.t. to the FUNDIO-semantics. Of course, we do not address the typing problems the are involved in the usage of Haskell s unsafePerformIO. The semantics can also be used as a novel semantics for strict functional languages with IO, where the sequence of IOs is not fixed

    Nondeterminism in algebraic specifications and algebraic programs

    Get PDF
    "Nondeterminism in Algebraic Specifications and Algebraic Programs" presents a mathematical theory for the integration of three concepts: non-determinism, axiomatic specification and term rewriting. For non-deterministic programs, an algebraic specification language is provided which admits the application of automated tools based on term rewriting techniques. This general framework is used to explore connections between logic programming and algebraic programming. Examples from various areas of computer science are given, including results of computer experiments with a prototypical implementation. This book should be of interest to readers working within several fields of theoretical computer science, from algebraic specification theory to formal descriptions of distributed systems

    Nondeterminism in Algebraic Specifications and Algebraic Programs

    Full text link
    corecore