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.

Dependency Core Calculus


Information-Flow Control


Maximilian Algehed

Funktionell programmering

Alejandro Russo


PLAS '17: Proceedings of the 2017 Workshop on Programming Languages and Analysis for Security

978-1-4503-5099-0 (ISBN)

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


Datavetenskap (datalogi)



Mer information

Senast uppdaterat