English

Cr\`eme de la Crem: Composable Representable Executable Machines (Architectural Pearl)

Software Engineering 2023-07-19 v1

Abstract

In this paper we describe how to build software architectures as a composition of state machines, using ideas and principles from the field of Domain-Driven Design. By definition, our approach is modular, allowing one to compose independent subcomponents to create bigger systems, and representable, allowing the implementation of a system to be kept in sync with its graphical representation. In addition to the design itself we introduce the Crem library, which provides a concrete state machine implementation that is both compositional and representable, Crem uses Haskell's advanced type-level features to allow users to specify allowed and forbidden state transitions, and to encode complex state machine -- and therefore domain-specific -- properties. Moreover, since Crem's state machines are representable, Crem can automatically generate graphical representations of systems from their domain implementations.

Keywords

Cite

@article{arxiv.2307.09090,
  title  = {Cr\`eme de la Crem: Composable Representable Executable Machines (Architectural Pearl)},
  author = {Marco Perone and Georgios Karachalias},
  journal= {arXiv preprint arXiv:2307.09090},
  year   = {2023}
}
R2 v1 2026-06-28T11:33:20.873Z