• Indiana University (IU), Bloomington, Indiana. Advisor: Ryan Newton. Summer 2015–present. Pursuing Ph.D in Computer Science.
    • Teaching assistant, CSCI-P 523: Programming Language Implementation, compilers course at Indiana University, Fall 2016.
  • University of Kansas (KU), Lawrence, Kansas. Advisor: Andy Gill. Class of 2015. B.S. in Computer Science with Mathematics minor. GPA 3.9/4.0.
    • Co-chair of KU Competitive Programming Group, 2013–2015.

Work experience


Professional activities



  • DerivingVia; or, How to Turn Hand-Written Instances into an Anti-Pattern. PLClub, Philadelphia, PA. June 8, 2018. [ pdf ]
  • Liquid Haskell: Refined, reflective, and classy. PL Wonks, Bloomington, IN. September 1, 2018. [ pdf ] [ youtube ]


  • Livin’ la via loca: Coercing Types with Class. Midwest PL Summit, Bloomington, IN. December 1, 2017. [ pdf ]
  • Monadic Composition for Deterministic, Parallel Batch Processing. OOPSLA’17, Vancouver, BC, Canada. October 26, 2017. [ pdf ] [ youtube ]
    • Monadic Composition for Deterministic, Parallel Batch Processing (OOPSLA’17 practice talk). PL Wonks, Bloomington, IN. October 13, 2017. [ pdf ]
  • Type Theorists HATE Him! Learn this ONE WEIRD TRICK to fake dependent types in a language that doesn’t support them. PL Wonks, Bloomington, IN. September 1, 2017. [ pdf ] [ youtube ]
  • Detflow: towards deterministic workflows on your favorite OS. PL Wonks, Bloomington, IN. March 24, 2017. [ pdf ]




  • Glasgow Haskell Compiler (GHC) (contributor). The flagship compiler for the Haskell programming language. Contributed to GHC’s support for metaprogramming, including deriving and Template Haskell.
  • blank-canvas (co-maintainer). A Haskell binding to the HTML5 <canvas> API, which allows for graphical web applications to be written in Haskell.
  • HERMIT (contributor and tester). An interactive Haskell compiler plugin that allows a user to apply code rewrites to make the process of high-assurance software development easier. HERMIT applies several semi-formal modeling techniques such as the worker/wrapper transformation.

Software skills

  • Proficient in Haskell, C, and Java. Familiar with Android, C++, JavaScript, Liquid Haskell, Standard ML, and Scala.