@article{rattus,
  author = {Bahr, Patrick},
  title = {Modal {FRP} for all: Functional reactive programming without space leaks in {Haskell}},
  abstract = {Functional reactive programming (FRP) provides a high-level
  interface for implementing reactive systems in a declarative
  manner. However, this high-level interface has to be carefully
  reigned in to ensure that programs can in fact be executed in
  practice. Specifically, one must ensure that FRP programs are
  productive, causal, and can be implemented without introducing space
  leaks. In recent years, modal types have been demonstrated to be an
  effective tool to ensure these operational properties.

  In this paper, we present \textsf{Rattus}, a modal FRP language that extends
  and simplifies previous modal FRP calculi while still maintaining
  the operational guarantees for productivity, causality, and space
  leaks. The simplified type system makes \textsf{Rattus} a practical
  programming language that can be integrated with existing functional
  programming languages. To demonstrate this, we have implemented a
  shallow embedding of \textsf{Rattus} in Haskell that allows the programmer
  to write \textsf{Rattus} code in familiar Haskell syntax and seamlessly
  integrate it with regular Haskell code. Thus \textsf{Rattus} combines the
  benefits enjoyed by FRP libraries such as Yampa, namely access to a
  rich library ecosystem (e.g.\ for graphics programming), with the
  strong operational guarantees offered by a bespoke type system.

  To establish the productivity, causality, and memory properties of
  the language, we prove type soundness using a logical relations
  argument fully mechanised in the Coq proof assistant.},
  volume = {32},
  number = {e15},
  DOI = {10.1017/S0956796822000132},
  journal = {Journal of Functional Programming},
  publisher = {Cambridge University Press},
  month = dec,
  Date = {2022-12-26},
  year = {2022},
  keywords = {functional reactive programming, modal types, type systems, Haskell,garbage collection},
  talkyear = {2023}
}