Encoding DCC in Haskell
Paper in 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

Haskell

Information-Flow Control

Author

Maximilian Algehed

Functional Programming

Alejandro Russo

Information Security

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,

Subject Categories

Computer Science

DOI

10.1145/3139337.3139338

More information

Latest update

3/18/2022