HTTP/2 301
server: GitHub.com
content-type: text/html
location: https://blog.csongor.co.uk/
x-github-request-id: 677D:370DC9:4A488:52D61:696A47A8
accept-ranges: bytes
age: 0
date: Fri, 16 Jan 2026 14:14:00 GMT
via: 1.1 varnish
x-served-by: cache-bom-vanm7210032-BOM
x-cache: MISS
x-cache-hits: 0
x-timer: S1768572841.573340,VS0,VE227
vary: Accept-Encoding
x-fastly-request-id: fbd90ead45cf0e41b5f26770245235c340a93a40
content-length: 162
HTTP/2 200
server: GitHub.com
content-type: text/html; charset=utf-8
last-modified: Mon, 10 Nov 2025 18:35:38 GMT
access-control-allow-origin: *
etag: W/"6912307a-279a"
expires: Fri, 16 Jan 2026 12:30:27 GMT
cache-control: max-age=600
content-encoding: gzip
x-proxy-cache: MISS
x-github-request-id: 203A:3F0393:2C1AC:31717:696A2D0A
accept-ranges: bytes
age: 0
date: Fri, 16 Jan 2026 14:14:01 GMT
via: 1.1 varnish
x-served-by: cache-bom-vanm7210045-BOM
x-cache: HIT
x-cache-hits: 0
x-timer: S1768572841.905563,VS0,VE229
vary: Accept-Encoding
x-fastly-request-id: 303a572c2297b51d77633a31abb51a740bd4dec6
content-length: 3101
( )
2025
Simulating Haskell-style GADTs with phantom witnesses and specialisation.
2020
generic-lens gets a new interface.
2019
Hiding internal details of constraint synonyms.
Improving code readability by enforcing type annotations.
In which I present a hidden gem in the vim text editor.
Exploiting GHC internals to define top-level implicit parameters.
2018
Stuck type families are notorious for producing puzzling type errors. In this post I present a technique for detecting and reporting them.
A technique for manipulating Symbols in GHC for type-level programming.
2017
A techinque for approximating Generic2 with only the Generic type class.
Deriving lenses generically
Writing a simple parser of type-level symbols in PureScript 0.12
2015
Some interesting consequences of lazy evaluation.