9 research outputs found
Monadic Functional Reactive Programming
Functional Reactive Programming (FRP) is a way to program reactive systems in functional style, eliminating many of the problems
that arise from imperative techniques. In this paper, we present an
alternative FRP formulation that is based on the notion of a reactive computation: a monadic computation which may require the
occurrence of external events to continue. A signal computation is a
reactive computation that may also emit values. In contrast to signals
in other FRP formulations, signal computations can end, leading to
a monadic interface for sequencing signal phases. This interface has
several advantages: routing is implicit, sequencing signal phases is
easier and more intuitive than when using the switching combinators found in other FRP approaches, and dynamic lists require much
less boilerplate code. In other FRP approaches, either the entire
FRP expression is re-evaluated on each external stimulus, or impure
techniques are used to prevent redundant re-computations. We show
how Monadic FRP can be implemented straightforwardly in a purely
functional way while preventing redundant re-computations
Monadic functional reactive programming
Functional Reactive Programming (FRP) is a way to program reactive systems in functional style, eliminating many of the problems
that arise from imperative techniques. In this paper, we present an
alternative FRP formulation that is based on the notion of a reactive computation: a monadic computation which may require the
occurrence of external events to continue. A signal computation is a
reactive computation that may also emit values. In contrast to signals
in other FRP formulations, signal computations can end, leading to
a monadic interface for sequencing signal phases. This interface has
several advantages: routing is implicit, sequencing signal phases is
easier and more intuitive than when using the switching combinators found in other FRP approaches, and dynamic lists require much
less boilerplate code. In other FRP approaches, either the entire
FRP expression is re-evaluated on each external stimulus, or impure
techniques are used to prevent redundant re-computations. We show
how Monadic FRP can be implemented straightforwardly in a purely
functional way while preventing redundant re-computations
Efficient abstractions for visualization and interaction
Abstractions, such as functions and methods, are an essential tool for any programmer. Abstractions encapsulate the details of a computation: the programmer only needs to know what the abstraction achieves, not how it achieves it. However, using abstractions can come at a cost: the resulting program may be inefficient. This can lead to programmers not using some abstractions, instead writing the entire functionality from the ground up. In this thesis, we present several results that make this situation less likely when programming interactive visualizations. We present results that make abstractions more efficient in the areas of graphics, layout and events
Understanding information update in questionnaires
Questionnaires are an important medium for collecting information in diverse areas of society (scientific surveys, tax filing, auditing guidance, etc.). We are interested in a domain-specific language (DSL) to automatically generate questionnaire software from declarative specifications. This note describes an important aspect of the semantics of such a DSL: what goes on when users fill out a form? The formalism is based on the epistemic notion of information update and has a wide range of applications. It provides a formal interpretation for query forms, and for the process of answering such forms. The attractiveness of the approach is in the fact that asking questions, providing partial answers to questions, and providing full answers to questions, are all modeled by the same mechanism of constraining a range of possibilities
Functional reactive programming, refactored
Functional Reactive Programming (FRP) has come to mean many things. Yet, scratch the surface of the multitude of realisations, and there is great commonality between them. This paper investigates this commonality, turning it into a mathematically coherent and practical FRP realisation that allows us to express the functionality of many existing FRP systems and beyond by providing a minimal FRP core parameterised on a monad. We give proofs for our theoretical claims and we have verified the practical side by benchmarking a set of existing, non-trivial Yampa applications running on top of our new system with very good results
Asynchronous Monad for Reactive IoT Programming
The widespread adoption of Internet of Things (IoT) has given rise to systems which must reactively process signal data, while maintaining latency and throughput constraints. While the reactive programming paradigm partially addresses this problem, it does not offer a complete solution. We propose a design for a monad, AsyncM, and apply it to implement push-pull functional reactive programming (FRP) where side-effect bound events are performed in low-latency push streams, and time-series computations are performed in demand-driven pull streams. The design uses implicitly threaded cancellation tokens and continuation passing style to allow for implementations in languages which have single-threaded event-loops as well as languages which have multi-threading.
We present our abstractions Stream, Signal, and Behavior and their functor, applicative, and (when applicable) monadic instances. We demonstrate how push streams (Stream) can be converted to pull streams (Signal) (and visa versa) to apply our model to practical use cases. We give a use case of a real-time IoT data analytics platform to demonstrate our design\u27s industrial significance where signal sample rates can change dynamically based on unknown factors such as network speed and processor resources. Application of the design to dynamic languages is shown throughout the paper in a reference JavaScript implementation
Concurrency Controls in Event-Driven Programs
Functional reactive programming (FRP) is a programming paradigm that utilizes the concepts of functional programming and time-varying data types to create event-driven applications. In this paradigm, data types in which values can change over time are primitives and can be applied to functions. These values are composable and can be combined with functions to create values that react to changes in values from multiple sources. Events can be modeled as values that change in discrete time steps. Computation can be encoded as values that produce events, with combination operators, it enables us to write concurrent event-driven programs by combining the concurrent computation as events. Combined with the denotational approach of functional programming, we can write programs in a concise manner.
The style of event-driven programming has been widely adopted for developing graphical user interface applications, since they need to process events concurrently to stay responsive. This makes FRP a fitting approach for managing complex state and handling of events concurrently.
In recent years, real-time systems such as IoT (internet of things) applications have become an important field of computation. Applying FRP to real-time systems is still an active area of research.For IoT applications, they are commonly tasked to perform data capturing in real time and transmit them to other devices. They need to exchange data with other applications over the internet and respond in a timely manner. The data needs to be processed, for simple analysis or more computation intensive work such as machine learning. Designing applications that perform these tasks and remain efficient and responsive can be challenging.
In this thesis, we demonstrate that FRP is a suitable approach for real-time applications. These applications require soft real-time requirements, where systems can tolerate tasks that fail to meet the deadline and the results of these tasks might still be useful.First, we design the concurrency abstractions needed for supporting asynchronous computation and use it as the basis for building the FRP abstraction. Our implementation is in Haskell, a functional programming language with a rich type system that allows us to model abstractions with ease. The concurrency abstraction is based on some of the ideas from the Haskell solution for asynchronous computation, which elegantly supports cancelation in a composable way. Based on the Haskell implementation, we extend our design with operators that are more suitable for building web applications. We translate our implementation to JavaScript as it is more commonly used for web application development, and implementing the RxJS interface. RxJS is a popular JavaScript library for reactive programming in web applications. By implementing the RxJS interface, we argue that our programming model implemented in Haskell is also applicable in mainstream languages such as JavaScript