-
Resumable exceptions
- November 4, 2024
-
Idea: a more structural code editor
- November 2, 2024
-
Subtyping and subsumption
- October 21, 2024
-
OOP is not that bad, actually
- October 9, 2024
-
My thoughts on OCaml
- April 24, 2023
-
Fast polymorphic record access
- January 23, 2023
-
Products and sums, named and anonymous
- April 10, 2021
-
Conditional compilation based on crate type
- December 24, 2020
-
8 years of Haskell
- June 30, 2020
-
gdb breakpoints with conditions on backtrace
- April 25, 2020
-
New blog post published on Well-Typed's blog
- March 25, 2020
-
Knot-tying: two more examples, and an alternative
- February 27, 2020
-
Knot-tying: why and how (and my opinions on it)
- February 21, 2020
-
Some arguments against small syntax extensions in GHC
- January 22, 2020
-
A project we've been working on presented at MuniHac 2018
- October 22, 2018
-
New blog post published elsewhere
- May 19, 2018
-
Debugging #15038
- April 28, 2018
-
On malloc and brk/sbrk
- April 8, 2018
-
Three runtime optimizations done by GHC's GC
- March 16, 2018
-
Fuzzy module loading in GHCi
- October 26, 2017
-
A parallel scheduler in 50 lines of Haskell
- October 16, 2017
-
More Rust woes
- October 8, 2017
-
Enable these two flags in GHC 8.2
- July 15, 2017
-
My new XFCE + i3 setup
- November 30, 2016
-
Papers I read in 2015-2016
- November 15, 2016
-
More Rust problems (and a sketch of a solution)
- September 11, 2016
-
I'm available for job offers
- September 5, 2016
-
Add a flag to your compiler to print errors in reversed order
- September 4, 2016
-
IORef and STRef under the hood
- July 25, 2016
-
Unboxed sums FAQ
- July 22, 2016
-
On matching bang patterns
- June 27, 2016
-
How I solved the Synacor Challenge
- June 19, 2016
-
Rust borrow checker woes
- March 28, 2016
-
On -XStrict
- November 16, 2015
-
On data representation in GHC Haskell
- November 13, 2015
-
A learning system that is as fast as a static one
- August 16, 2015
-
The issue with work sharing (common subexpression elimination)
- August 13, 2015
-
The issue of splitting without work duplication
- August 13, 2015
-
On sufficiently smart compilers
- August 9, 2015
-
Staging is not just code generation
- May 17, 2015
-
Simplest pathological program for supercompilers
- May 16, 2015
-
Compilation through interpretation, a small experiment
- May 13, 2015
-
Some benchmarks for meta-tracing BF JIT and traditional BF implementations
- January 29, 2015
-
Top-down expression parsing is easy
- January 29, 2015
-
Loading dynamic Haskell libs in Lua
- January 16, 2015
-
Understanding Futamura Projections
- January 11, 2015
-
Two challenges for dependently typed languages
- September 23, 2014
-
Problems with tactic generated programs
- September 13, 2014
-
GHC + Cabal installation guide for starters
- September 12, 2014
-
Proving sorting algorithms correct
- September 8, 2014
-
Two awesome blogs
- July 20, 2014
-
Coq exercises for beginners
- July 12, 2014
-
A complicated proof of a simple theorem
- July 10, 2014
-
Stack traces in GHCJS
- June 20, 2014
-
Dependency boundaries and orphan instances
- June 13, 2014
-
Calling Haskell from Lua and Lua from Haskell
- April 27, 2014
-
I'm accepted into GSoC and I'll be hacking on GHCJS this summer
- April 24, 2014
-
An idea to handle left-recursion in Parsec
- March 7, 2014
-
Proving soundness of simply typed multi-staged lambda-calculus
- March 6, 2014
-
Combining digestive-functors and heist with Snap (continued from last tutorial)
- January 4, 2014
-
Quick digestive-functors and heist tutorial
- January 3, 2014
-
Fun C compile time assertion trick
- December 30, 2013
-
Testing assembly programs using Haskell, QuickCheck (and FFI)
- November 14, 2013
-
Observability of bottom values
- November 3, 2013
-
Memoized parsing in continuation-passing style
- October 21, 2013
-
Half-baked idea: Abstract interpretation for code completion
- October 16, 2013
-
Parametric polymorphism and unboxed representations
- October 9, 2013
-
On proof automations -- part 3
- September 23, 2013
-
TIL - Haskell 98 doesn't have principal typing property
- September 20, 2013
-
Quick rant (K Framework)
- September 19, 2013
-
On proof automations -- part 2
- September 17, 2013
-
On proof automations
- September 11, 2013
-
MANTI - Prolog implementation in 515 lines of Haskell
- July 31, 2013
-
My first academic work is now open source
- July 22, 2013
-
Non-local returns in functional programs
- July 21, 2013
-
fmap fix return
- July 7, 2013
-
Shen.hs FFI
- June 29, 2013
-
Shen.hs -- Haskell port of Shen
- June 21, 2013
-
Type checking with Prolog
- June 13, 2013
-
lcl -- Lua Container Library and The One Data Structure to Rule Them All
- June 8, 2013
-
Compiling Love2D with LuaJIT
- June 8, 2013
-
Implicit casts
- May 25, 2013
-
A converter from Lua tables to JavaScript objects
- May 6, 2013
-
An interesting case of closures: is closed-over variable reference or value?
- April 24, 2013
-
On typing dynamic langs
- April 19, 2013
-
THREE.js axis helper
- April 17, 2013
-
Internship report - type inference, row polymorphism, and multi-stage programming
- April 15, 2013
-
Go channel examples ported to Haskell
- April 8, 2013
-
Quick Box2d tips: Terrains, jump behavior and bodies with multiple shapes
- March 6, 2013
-
Quick Vim Tip for OCaml programmers: Fix OCamlYacc comment syntax
- February 14, 2013
-
Quick Vim Tip: Disable cursorline
- January 16, 2013
-
Quick Vim Tip: Add Left Margin To Buffers
- January 16, 2013
-
Getting different distributions out of uniform distribution
- December 19, 2012
-
Separating lexing and parsing stages in Parsec
- August 30, 2012
-
Some GHC extensions I use
- July 31, 2012
-
Lazy lists in Lua and eliminating tail-calls with continuations
- May 20, 2012
-
Ramblings on monads
- April 9, 2012
-
Finger Tree I
- March 14, 2012