Do Be Do Be Do

Sam Lindley, Conor McBride, Craig McLaughlin

Research output: Chapter in Book/Report/Conference proceedingConference contribution book

16 Citations (Scopus)

Abstract

We explore the design and implementation of Frank, a strict functional programming language with a bidirectional effect type system designed from the ground up around a novel variant of Plotkin and Pretnar's effect handler abstraction.

Effect handlers provide an abstraction for modular effectful programming: a handler acts as an interpreter for a collection of commands whose interfaces are statically tracked by the type system. However, Frank eliminates the need for an additional effect handling construct by generalising the basic mechanism of functional abstraction itself. A function is simply the special case of a Frank operator that interprets no commands. Moreover, Frank's operators can be multihandlers which simultaneously interpret commands from several sources at once, without disturbing the direct style of functional programming with values.

Effect typing in Frank employs a novel form of effect polymorphism which avoid mentioning effect variables in source code. This is achieved by propagating an ambient ability inwards, rather than accumulating unions of potential effects outwards.

We introduce Frank by example, and then give a formal account of the Frank type system and its semantics. We introduce Core Frank by elaborating Frank operators into functions, case expressions, and unary handlers, and then give a sound small-step operational semantics for Core Frank.

Programming with effects and handlers is in its infancy. We contribute an exploration of future possibilities, particularly in combination with other forms of rich type system.
LanguageEnglish
Title of host publicationPOPL'2017
Subtitle of host publicationProceedings of the 44th ACM SIGPLAN Symposium on Principles of Programming Languages
EditorsAndrew Gordon
Place of PublicationNew York
Pages500-514
Number of pages15
DOIs
Publication statusPublished - 15 Jan 2017
EventThe 44th ACM SIGPLAN Symposium on Principles of Programming Languages: the 44th ACM SIGPLAN Symposium on Principles of Programming Languages - Paris, France
Duration: 15 Jan 201721 Jan 2017

Conference

ConferenceThe 44th ACM SIGPLAN Symposium on Principles of Programming Languages
Abbreviated titlePOPL 2017
CountryFrance
CityParis
Period15/01/1721/01/17

Fingerprint

Functional programming
Semantics
Computer programming
Polymorphism
Computer programming languages
Mathematical operators
Acoustic waves

Keywords

  • algebraic effects
  • effect handlers
  • effect polymorphism
  • call-by-push-value
  • pattern matching
  • continuations
  • bidirectional typing

Cite this

Lindley, S., McBride, C., & McLaughlin, C. (2017). Do Be Do Be Do. In A. Gordon (Ed.), POPL'2017 : Proceedings of the 44th ACM SIGPLAN Symposium on Principles of Programming Languages (pp. 500-514). New York. https://doi.org/10.1145/3009837.3009897
Lindley, Sam ; McBride, Conor ; McLaughlin, Craig. / Do Be Do Be Do. POPL'2017 : Proceedings of the 44th ACM SIGPLAN Symposium on Principles of Programming Languages. editor / Andrew Gordon. New York, 2017. pp. 500-514
@inproceedings{7857fd5ee47148c5b0f67ac4a1bcf95a,
title = "Do Be Do Be Do",
abstract = "We explore the design and implementation of Frank, a strict functional programming language with a bidirectional effect type system designed from the ground up around a novel variant of Plotkin and Pretnar's effect handler abstraction.Effect handlers provide an abstraction for modular effectful programming: a handler acts as an interpreter for a collection of commands whose interfaces are statically tracked by the type system. However, Frank eliminates the need for an additional effect handling construct by generalising the basic mechanism of functional abstraction itself. A function is simply the special case of a Frank operator that interprets no commands. Moreover, Frank's operators can be multihandlers which simultaneously interpret commands from several sources at once, without disturbing the direct style of functional programming with values.Effect typing in Frank employs a novel form of effect polymorphism which avoid mentioning effect variables in source code. This is achieved by propagating an ambient ability inwards, rather than accumulating unions of potential effects outwards.We introduce Frank by example, and then give a formal account of the Frank type system and its semantics. We introduce Core Frank by elaborating Frank operators into functions, case expressions, and unary handlers, and then give a sound small-step operational semantics for Core Frank.Programming with effects and handlers is in its infancy. We contribute an exploration of future possibilities, particularly in combination with other forms of rich type system.",
keywords = "algebraic effects, effect handlers, effect polymorphism, call-by-push-value, pattern matching, continuations, bidirectional typing",
author = "Sam Lindley and Conor McBride and Craig McLaughlin",
year = "2017",
month = "1",
day = "15",
doi = "10.1145/3009837.3009897",
language = "English",
isbn = "9781450346603",
pages = "500--514",
editor = "Andrew Gordon",
booktitle = "POPL'2017",

}

Lindley, S, McBride, C & McLaughlin, C 2017, Do Be Do Be Do. in A Gordon (ed.), POPL'2017 : Proceedings of the 44th ACM SIGPLAN Symposium on Principles of Programming Languages. New York, pp. 500-514, The 44th ACM SIGPLAN Symposium on Principles of Programming Languages, Paris, France, 15/01/17. https://doi.org/10.1145/3009837.3009897

Do Be Do Be Do. / Lindley, Sam; McBride, Conor; McLaughlin, Craig.

POPL'2017 : Proceedings of the 44th ACM SIGPLAN Symposium on Principles of Programming Languages. ed. / Andrew Gordon. New York, 2017. p. 500-514.

Research output: Chapter in Book/Report/Conference proceedingConference contribution book

TY - GEN

T1 - Do Be Do Be Do

AU - Lindley, Sam

AU - McBride, Conor

AU - McLaughlin, Craig

PY - 2017/1/15

Y1 - 2017/1/15

N2 - We explore the design and implementation of Frank, a strict functional programming language with a bidirectional effect type system designed from the ground up around a novel variant of Plotkin and Pretnar's effect handler abstraction.Effect handlers provide an abstraction for modular effectful programming: a handler acts as an interpreter for a collection of commands whose interfaces are statically tracked by the type system. However, Frank eliminates the need for an additional effect handling construct by generalising the basic mechanism of functional abstraction itself. A function is simply the special case of a Frank operator that interprets no commands. Moreover, Frank's operators can be multihandlers which simultaneously interpret commands from several sources at once, without disturbing the direct style of functional programming with values.Effect typing in Frank employs a novel form of effect polymorphism which avoid mentioning effect variables in source code. This is achieved by propagating an ambient ability inwards, rather than accumulating unions of potential effects outwards.We introduce Frank by example, and then give a formal account of the Frank type system and its semantics. We introduce Core Frank by elaborating Frank operators into functions, case expressions, and unary handlers, and then give a sound small-step operational semantics for Core Frank.Programming with effects and handlers is in its infancy. We contribute an exploration of future possibilities, particularly in combination with other forms of rich type system.

AB - We explore the design and implementation of Frank, a strict functional programming language with a bidirectional effect type system designed from the ground up around a novel variant of Plotkin and Pretnar's effect handler abstraction.Effect handlers provide an abstraction for modular effectful programming: a handler acts as an interpreter for a collection of commands whose interfaces are statically tracked by the type system. However, Frank eliminates the need for an additional effect handling construct by generalising the basic mechanism of functional abstraction itself. A function is simply the special case of a Frank operator that interprets no commands. Moreover, Frank's operators can be multihandlers which simultaneously interpret commands from several sources at once, without disturbing the direct style of functional programming with values.Effect typing in Frank employs a novel form of effect polymorphism which avoid mentioning effect variables in source code. This is achieved by propagating an ambient ability inwards, rather than accumulating unions of potential effects outwards.We introduce Frank by example, and then give a formal account of the Frank type system and its semantics. We introduce Core Frank by elaborating Frank operators into functions, case expressions, and unary handlers, and then give a sound small-step operational semantics for Core Frank.Programming with effects and handlers is in its infancy. We contribute an exploration of future possibilities, particularly in combination with other forms of rich type system.

KW - algebraic effects

KW - effect handlers

KW - effect polymorphism

KW - call-by-push-value

KW - pattern matching

KW - continuations

KW - bidirectional typing

U2 - 10.1145/3009837.3009897

DO - 10.1145/3009837.3009897

M3 - Conference contribution book

SN - 9781450346603

SP - 500

EP - 514

BT - POPL'2017

A2 - Gordon, Andrew

CY - New York

ER -

Lindley S, McBride C, McLaughlin C. Do Be Do Be Do. In Gordon A, editor, POPL'2017 : Proceedings of the 44th ACM SIGPLAN Symposium on Principles of Programming Languages. New York. 2017. p. 500-514 https://doi.org/10.1145/3009837.3009897