Encoding DCC in Haskell
Paper i proceeding, 2017

The seminal work on the Dependency Core Calculus (DCC) 
shows how monads not only can be used for embedding effects in
purely functional languages but also to statically track data dependencies. Such types of analysis have applications in research areas
like security, partial evaluation, and slicing, where DCC plays the
role of a unifying formalism. For a Haskell programmer, putting
DCC into practice raises many interesting conceptual and implementation concerns. Specifically, DCC uses a non-standard bind
operator, i.e., with a different type signature than that provided by
monads. In fact, embedding such non-standard bind operator opens
the door for many design decisions. Furthermore, it is unclear if
DCC extends to traditional methods used by Haskell programmers
to handle effects (such as monad transformers). In this work, we
describe a novel encoding of DCC in Haskell, with a focus on its use
for security—although our results also apply to the other domains.
We address the concerns mentioned above and show how our implementation of DCC can be seen as a direct translation from its
typing rules via the use of closed type families and type classes—two
advanced type system features of Haskell. We also analyze what
kind of effects DCC is compatible with and which ones it cannot
secure. We also derive an alternative formulation of DCC based on
fmap and a corresponding non-standard join.

Information-Flow Control

Dependency Core Calculus



Maximilian Algehed

Funktionell programmering

Alejandro Russo


ACM Workshop on Programming Languages and Analysis for Security
Dallas, USA,


Datavetenskap (datalogi)