[
  {
    "slug": "internalized-guarded-recursion-for-equational-reasoning",
    "title": "Internalized Guarded Recursion for Equational Reasoning",
    "date": "2022-10-21",
    "dateLabel": "21 October 2022",
    "path": "reader/2022/internalized-guarded-recursion-for-equational-reasoning/",
    "categories": "Data Structures · Haskell",
    "origin": "http://comonad.com/reader/2022/internalized-guarded-recursion-for-equational-reasoning/",
    "author": "Gershom Bazerman",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/62d12610e08f231f36fe7c17.html",
    "rawSource": "content/original/corpus/62d12610e08f231f36fe7c17.html",
    "rawFormat": "html",
    "retrieved": "2026-09-21",
    "sha256": "01a46abbd69e442fd57bf1af89eb222bcaebb66b57b77a3a20a950b50fb2b421",
    "archive": "source/articles/internalized-guarded-recursion-for-equational-reasoning.original.html.txt"
  },
  {
    "slug": "computational-quadrinitarianism-curious-correspondences-go-cubical",
    "title": "Computational Quadrinitarianism (Curious Correspondences go Cubical)",
    "date": "2018-01-16",
    "dateLabel": "16 January 2018",
    "path": "reader/2018/computational-quadrinitarianism-curious-correspondences-go-cubical/",
    "categories": "Uncategorized",
    "origin": "http://comonad.com/reader/2018/computational-quadrinitarianism-curious-correspondences-go-cubical/",
    "author": "Gershom Bazerman",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/01563fa9c857e14cc415774d.html",
    "rawSource": "content/original/corpus/01563fa9c857e14cc415774d.html",
    "rawFormat": "html",
    "retrieved": "2026-09-21",
    "sha256": "c6a7f94b359568ce8cc4b69f32d68e9297c60d760fd64bec68cc20c90a7d9aea",
    "archive": "source/articles/computational-quadrinitarianism-curious-correspondences-go-cubical.original.html.txt"
  },
  {
    "slug": "the-state-comonad",
    "title": "The State Comonad",
    "date": "2018-01-06",
    "dateLabel": "6 January 2018",
    "path": "reader/2018/the-state-comonad/",
    "categories": "Haskell · Monads",
    "origin": "http://comonad.com/reader/2018/the-state-comonad/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/bafec0b96bfa9d914201220d.html",
    "rawSource": "content/original/corpus/bafec0b96bfa9d914201220d.html",
    "rawFormat": "html",
    "legacyId": "1139",
    "retrieved": "2026-09-21",
    "sha256": "af720b77cf52ac50142e8aaa3e238b0e6b8c164a28a485c5053f01852c730289",
    "archive": "source/articles/the-state-comonad.original.html.txt"
  },
  {
    "slug": "adjoint-triples",
    "title": "Adjoint Triples",
    "date": "2016-01-13",
    "dateLabel": "13 January 2016",
    "path": "reader/2016/adjoint-triples/",
    "categories": "Category Theory · Comonads · Haskell · Logic · Mathematics · Monads · Type Theory · Uncategorized",
    "origin": "http://comonad.com/reader/2016/adjoint-triples/",
    "author": "Dan Doel",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/dcae42a5b9aaa0bcb312dae7.html",
    "rawSource": "content/original/corpus/dcae42a5b9aaa0bcb312dae7.html",
    "rawFormat": "html",
    "retrieved": "2026-09-21",
    "sha256": "9c2809db213c24cfb2f30a57aa21509e4c832e48922c2b544b614599c1132b11",
    "archive": "source/articles/adjoint-triples.original.html.txt"
  },
  {
    "slug": "bound",
    "title": "Bound",
    "date": "2015-12-02",
    "dateLabel": "2 December 2015",
    "path": "reader/2015/bound/",
    "categories": "Haskell",
    "origin": "https://www.schoolofhaskell.com/user/edwardk/bound",
    "author": "Edward Kmett",
    "source": "School of Haskell",
    "rawHTML": "content/original/corpus/81212c0f04088fa81d4c8b0b.html",
    "rawSource": "content/original/corpus/d698a4ac4023c4dde4906de0.md",
    "rawFormat": "md",
    "rawURL": "https://www.schoolofhaskell.com/tutorial-raw/4906/f941295a3eebf64a926799ca2aabafe14435b5f7",
    "dateBasis": "Date displayed by School of Haskell; may reflect a later revision.",
    "retrieved": "2026-09-21",
    "sha256": "ee5d7d05a85a9c8b9c64c15ecfb7b36249f3865f37ce03520e27d78ad87a0bd0",
    "archive": "source/articles/bound.original.md"
  },
  {
    "slug": "fibonacci-search",
    "title": "Fibonacci — Part 2: Open-Ended Fibonacci Search",
    "date": "2015-10-13",
    "dateLabel": "13 October 2015",
    "path": "reader/2015/fibonacci-search/",
    "categories": "Haskell",
    "origin": "https://www.schoolofhaskell.com/user/edwardk/fibonacci/search",
    "author": "Edward Kmett",
    "source": "School of Haskell",
    "rawHTML": "content/original/corpus/d49bca1ed9f320dd90189a47.html",
    "rawSource": "content/original/corpus/911c9304c31c6c3a8a6f905b.md",
    "rawFormat": "md",
    "rawURL": "https://www.schoolofhaskell.com/tutorial-raw/4906/ef3bb842b9000d78432bcff461f73bed06069b8d",
    "dateBasis": "Date displayed by School of Haskell; may reflect a later revision.",
    "series": "fibonacci",
    "originalTitle": "Part 2: Open-Ended Fibonacci Search",
    "seriesOrder": 2,
    "retrieved": "2026-09-21",
    "sha256": "8adfb16c660985438d562ce254cf9ca3ad8e38d76bb819963859f1e8c5c53553",
    "archive": "source/articles/fibonacci-search.original.md"
  },
  {
    "slug": "some-rough-notes-on-univalent-foundations-and-b-systems-part-i",
    "title": "Some Rough Notes on Univalent Foundations and B-Systems, Part I",
    "date": "2015-09-15",
    "dateLabel": "15 September 2015",
    "path": "reader/2015/some-rough-notes-on-univalent-foundations-and-b-systems-part-i/",
    "categories": "Homotopy Type Theory · Type Theory",
    "origin": "http://comonad.com/reader/2015/some-rough-notes-on-univalent-foundations-and-b-systems-part-i/",
    "author": "Gershom Bazerman",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/c8df7a1de6e2cc015835e8b1.html",
    "rawSource": "content/original/corpus/c8df7a1de6e2cc015835e8b1.html",
    "rawFormat": "html",
    "legacyId": "1105",
    "retrieved": "2026-09-21",
    "sha256": "43b4fde385e0c8103cbcd84702f94f0dc31efed1aded445b589f0800401eb678",
    "archive": "source/articles/some-rough-notes-on-univalent-foundations-and-b-systems-part-i.original.html.txt"
  },
  {
    "slug": "online-lca",
    "title": "On-line Lowest Common Ancestor",
    "date": "2015-08-27",
    "dateLabel": "27 August 2015",
    "path": "reader/2015/online-lca/",
    "categories": "Haskell",
    "origin": "https://www.schoolofhaskell.com/user/edwardk/online-lca",
    "author": "Edward Kmett",
    "source": "School of Haskell",
    "rawHTML": "content/original/corpus/c2b3fddaf5b3f361fefb727a.html",
    "rawSource": "content/original/corpus/09fe33c0fc02b5213668c7ee.md",
    "rawFormat": "md",
    "rawURL": "https://www.schoolofhaskell.com/tutorial-raw/4906/12df3bd5cac020b2c1c77edf8fa6ccc92f9337b0",
    "dateBasis": "Date displayed by School of Haskell; may reflect a later revision.",
    "retrieved": "2026-09-21",
    "sha256": "801167f44a2e3452e2df29e9d772ae2430967c786b35434250cff3c56f5ee4bb",
    "archive": "source/articles/online-lca.original.md"
  },
  {
    "slug": "unlifted-structures",
    "title": "Unlifted Structures",
    "date": "2015-08-27",
    "dateLabel": "27 August 2015",
    "path": "reader/2015/unlifted-structures/",
    "categories": "Haskell",
    "origin": "https://www.schoolofhaskell.com/user/edwardk/unlifted-structures",
    "author": "Edward Kmett",
    "source": "School of Haskell",
    "rawHTML": "content/original/corpus/2b7935538865fc301b88fd65.html",
    "rawSource": "content/original/corpus/e4532d2b7f150a32607915de.md",
    "rawFormat": "md",
    "rawURL": "https://www.schoolofhaskell.com/tutorial-raw/4906/bbf054cf4c47ccf0eb1c267a2a16b4f6c74ea341",
    "dateBasis": "Date displayed by School of Haskell; may reflect a later revision.",
    "retrieved": "2026-09-21",
    "sha256": "0a9ffafb8505fa49879cececdb643062f8439288d0c68fca07cc8415063621da",
    "archive": "source/articles/unlifted-structures.original.md"
  },
  {
    "slug": "on-the-unsafety-of-interleaved-io",
    "title": "On the unsafety of interleaved I/O",
    "date": "2015-07-22",
    "dateLabel": "22 July 2015",
    "path": "reader/2015/on-the-unsafety-of-interleaved-io/",
    "categories": "Haskell",
    "origin": "http://comonad.com/reader/2015/on-the-unsafety-of-interleaved-io/",
    "author": "Dan Doel",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/67e9c32e06b0fa0f0955b77b.html",
    "rawSource": "content/original/corpus/67e9c32e06b0fa0f0955b77b.html",
    "rawFormat": "html",
    "retrieved": "2026-09-21",
    "sha256": "ec450da5a03617e1f40bc056062e97e38539bee0a634f89d388b8f7baaa4cd07",
    "archive": "source/articles/on-the-unsafety-of-interleaved-io.original.html.txt"
  },
  {
    "slug": "moore-for-less",
    "title": "Moore for Less",
    "date": "2015-05-28",
    "dateLabel": "28 May 2015",
    "path": "reader/2015/moore-for-less/",
    "categories": "Haskell",
    "origin": "https://www.schoolofhaskell.com/user/edwardk/moore/for-less",
    "author": "Edward Kmett",
    "source": "School of Haskell",
    "rawHTML": "content/original/corpus/2d5b1f1be31f6f04e07e7d4f.html",
    "rawSource": "content/original/corpus/a2bd380233477b12005aa3b7.md",
    "rawFormat": "md",
    "rawURL": "https://www.schoolofhaskell.com/tutorial-raw/4906/9ab8b288c6c5cc9d1ab36ccb8c3c74167b4dd00f",
    "dateBasis": "Date displayed by School of Haskell; may reflect a later revision.",
    "series": "moore",
    "seriesOrder": 1,
    "retrieved": "2026-09-21",
    "sha256": "ec90b545f27804e4e597d593e33e0144c10a8b8eec43398c519e04df4789209b",
    "archive": "source/articles/moore-for-less.original.md"
  },
  {
    "slug": "categories-of-structures-in-haskell",
    "title": "Categories of Structures in Haskell",
    "date": "2015-05-25",
    "dateLabel": "25 May 2015",
    "path": "reader/2015/categories-of-structures-in-haskell/",
    "categories": "Category Theory · Comonads · Data Structures · Haskell · Kan Extensions · Mathematics · Monads · Type Hackery · Uncategorized",
    "origin": "http://comonad.com/reader/2015/categories-of-structures-in-haskell/",
    "author": "Dan Doel",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/792e103937b4b7f485e7dd61.html",
    "rawSource": "content/original/corpus/792e103937b4b7f485e7dd61.html",
    "rawFormat": "html",
    "series": "free-constructions-in-haskell",
    "seriesOrder": 3,
    "retrieved": "2026-09-21",
    "sha256": "af9994a9c791886f2726a9b344e6c4f4adf631222d2f1a3e2e4e8a3a9eaf7eb0",
    "archive": "source/articles/categories-of-structures-in-haskell.original.html.txt"
  },
  {
    "slug": "heap-of-successes",
    "title": "How to Replace Failure by a Heap of Successes",
    "date": "2015-05-02",
    "dateLabel": "2 May 2015",
    "path": "reader/2015/heap-of-successes/",
    "categories": "Haskell",
    "origin": "https://www.schoolofhaskell.com/user/edwardk/heap-of-successes",
    "author": "Edward Kmett",
    "source": "School of Haskell",
    "rawHTML": "content/original/corpus/6e11d6d974dbb9cca5d7b835.html",
    "rawSource": "content/original/corpus/8ca7002c048331594f000b07.md",
    "rawFormat": "md",
    "rawURL": "https://www.schoolofhaskell.com/tutorial-raw/4906/0f6911c474fa38006c6b1ba653b47020740cadcf",
    "dateBasis": "Date displayed by School of Haskell; may reflect a later revision.",
    "retrieved": "2026-09-21",
    "sha256": "c0a13e0a6427567e961afc30371c2ab78870896a328aa52d25ee08ff31fce663",
    "archive": "source/articles/heap-of-successes.original.md"
  },
  {
    "slug": "domains-sets-traversals-and-applicatives",
    "title": "Domains, Sets, Traversals and Applicatives",
    "date": "2015-04-29",
    "dateLabel": "29 April 2015",
    "path": "reader/2015/domains-sets-traversals-and-applicatives/",
    "categories": "Category Theory · Comonads · Data Structures · Haskell · Mathematics · Monads",
    "origin": "http://comonad.com/reader/2015/domains-sets-traversals-and-applicatives/",
    "author": "Dan Doel",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/a8ac59dd61c5ec9d78cdbf08.html",
    "rawSource": "content/original/corpus/a8ac59dd61c5ec9d78cdbf08.html",
    "rawFormat": "html",
    "series": "free-constructions-in-haskell",
    "seriesOrder": 2,
    "retrieved": "2026-09-21",
    "sha256": "2688be52226b3aacd453101765225d284864c30d07db0ed9e6729b8375f69297",
    "archive": "source/articles/domains-sets-traversals-and-applicatives.original.html.txt"
  },
  {
    "slug": "fibonacci-leonardo",
    "title": "Fibonacci — Part 1: Leonardo Random Access Lists",
    "date": "2015-04-28",
    "dateLabel": "28 April 2015",
    "path": "reader/2015/fibonacci-leonardo/",
    "categories": "Haskell",
    "origin": "https://www.schoolofhaskell.com/user/edwardk/fibonacci/leonardo",
    "author": "Edward Kmett",
    "source": "School of Haskell",
    "rawHTML": "content/original/corpus/08e5d05ea7555f24b9ed7a3d.html",
    "rawSource": "content/original/corpus/375863705d98619cdb11fc1a.md",
    "rawFormat": "md",
    "rawURL": "https://www.schoolofhaskell.com/tutorial-raw/4906/3a2678a9238b713dbb2240b8e98bff28c88444f4",
    "dateBasis": "Date displayed by School of Haskell; may reflect a later revision.",
    "series": "fibonacci",
    "originalTitle": "Part 1: Leonardo Random Access Lists",
    "seriesOrder": 1,
    "retrieved": "2026-09-21",
    "sha256": "41330906046abae67d913a7e84e9aab55d9e128d526347fd81ab4a2bc79a2034",
    "archive": "source/articles/fibonacci-leonardo.original.md"
  },
  {
    "slug": "free-monoids-in-haskell",
    "title": "Free Monoids in Haskell",
    "date": "2015-02-21",
    "dateLabel": "21 February 2015",
    "path": "reader/2015/free-monoids-in-haskell/",
    "categories": "Category Theory · Haskell · Mathematics",
    "origin": "http://comonad.com/reader/2015/free-monoids-in-haskell/",
    "author": "Dan Doel",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/ab5038cca0a712ac8d06ab5f.html",
    "rawSource": "content/original/corpus/ab5038cca0a712ac8d06ab5f.html",
    "rawFormat": "html",
    "series": "free-constructions-in-haskell",
    "seriesOrder": 1,
    "retrieved": "2026-09-21",
    "sha256": "c0c2fd3126625723647504fe5d646b70ea1ea8e24363005fe5b1014504ce7c1a",
    "archive": "source/articles/free-monoids-in-haskell.original.html.txt"
  },
  {
    "slug": "snippets-fmap",
    "title": "The free theorem for fmap",
    "date": "2015-02-16",
    "dateLabel": "16 February 2015",
    "path": "reader/2015/snippets-fmap/",
    "categories": "Haskell",
    "origin": "https://www.schoolofhaskell.com/user/edwardk/snippets/fmap",
    "author": "Edward Kmett",
    "source": "School of Haskell",
    "rawHTML": "content/original/corpus/2656ecbaaf9e63aa4a7ce5a2.html",
    "rawSource": "content/original/corpus/e6d0788672cacbb738446f7b.md",
    "rawFormat": "md",
    "rawURL": "https://www.schoolofhaskell.com/tutorial-raw/4906/f8868a34da7b6bd25296d160942294f74bccdf11",
    "dateBasis": "Date displayed by School of Haskell; may reflect a later revision.",
    "series": "snippets",
    "seriesOrder": 1,
    "retrieved": "2026-09-21",
    "sha256": "0deee746bd7c105ecfa7a83c7f7cd96f440ea00aae02da50e6a4cfc1363b160c",
    "archive": "source/articles/snippets-fmap.original.md"
  },
  {
    "slug": "fast-circular-substitution",
    "title": "Fast Circular Substitution",
    "date": "2014-12-30",
    "dateLabel": "30 December 2014",
    "path": "reader/2014/fast-circular-substitution/",
    "categories": "Algorithms · Haskell · Type Theory",
    "origin": "http://comonad.com/reader/2014/fast-circular-substitution/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/7b8b2013598c2da7fff39d56.html",
    "rawSource": "content/original/corpus/7b8b2013598c2da7fff39d56.html",
    "rawFormat": "html",
    "legacyId": "956",
    "retrieved": "2026-09-21",
    "sha256": "23c0da89072844f702fb5a9f858c1da079c03cbc317d7d8c692eda2c09ef1547",
    "archive": "source/articles/fast-circular-substitution.original.html.txt"
  },
  {
    "slug": "revisiting-matrix-multiplication-part-5",
    "title": "Revisiting Matrix Multiplication — Part V: Heaps of Performance",
    "date": "2014-11-16",
    "dateLabel": "16 November 2014",
    "path": "reader/2014/revisiting-matrix-multiplication-part-5/",
    "categories": "Haskell",
    "origin": "https://www.schoolofhaskell.com/user/edwardk/revisiting-matrix-multiplication/part-5",
    "author": "Edward Kmett",
    "source": "School of Haskell",
    "rawHTML": "content/original/corpus/640e668ecaaad2b8619ea1e7.html",
    "rawSource": "content/original/corpus/485d93f33aa0885db5a24360.md",
    "rawFormat": "md",
    "rawURL": "https://www.schoolofhaskell.com/tutorial-raw/4906/b43bf065739f05937cdb8de9cdac53ec646bed1a",
    "dateBasis": "Date displayed by School of Haskell; may reflect a later revision.",
    "series": "revisiting-matrix-multiplication",
    "originalTitle": "Part V: Heaps of Performance",
    "seriesOrder": 5,
    "retrieved": "2026-09-21",
    "sha256": "67964ee95d565d3e3152a7cd9c5a06d73d502627320cd0aa033973149a1e0c8d",
    "archive": "source/articles/revisiting-matrix-multiplication-part-5.original.md"
  },
  {
    "slug": "quine-shader-toys",
    "title": "Quine: Shader Toys",
    "date": "2014-10-28",
    "dateLabel": "28 October 2014 · repository",
    "path": "reader/2014/quine-shader-toys/",
    "categories": "Graphics · GLSL · Haskell",
    "origin": "https://github.com/ekmett/quine",
    "author": "Edward Kmett",
    "source": "Quine",
    "rawSource": "content/assets/quine/original/README.markdown",
    "rawFormat": "md",
    "dateBasis": "Archive date is the first dodecahedron shader commit, 28 October 2014. Generators followed on 8 November 2014. The browser companion was created on 22 September 2026.",
    "editionNote": "A new browser companion to the preserved Quine repository, not a recovered historical blog post. Shader algorithms are retained, with the mechanical GLSL ES changes described above. Original third-party credits and licenses remain with their sources.",
    "rightsNote": "Quine © Edward Kmett. Shader credits and licenses are listed above and retained in the source.",
    "datePublished": "2026-09-22",
    "retrieved": "2026-09-22",
    "kind": "Demo",
    "sha256": "417891398e5fc406867b82eaca48ce4a59e1d2bca954166efcbaa66f438d6805",
    "archive": "source/articles/quine-shader-toys.original.md"
  },
  {
    "slug": "letter-to-a-young-haskell-enthusiast",
    "title": "Letter to a Young Haskell Enthusiast",
    "date": "2014-08-01",
    "dateLabel": "1 August 2014",
    "path": "reader/2014/letter-to-a-young-haskell-enthusiast/",
    "categories": "Uncategorized",
    "origin": "http://comonad.com/reader/2014/letter-to-a-young-haskell-enthusiast/",
    "author": "Gershom Bazerman",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/1ffc3f4c4928fe6177f9828e.html",
    "rawSource": "content/original/corpus/1ffc3f4c4928fe6177f9828e.html",
    "rawFormat": "html",
    "retrieved": "2026-09-21",
    "sha256": "fcca5e5f548ae2e2848ff7812cdc3594488c5e4ab27322ec5231eb232cf24530",
    "archive": "source/articles/letter-to-a-young-haskell-enthusiast.original.html.txt"
  },
  {
    "slug": "cufp-cfp",
    "title": "CUFP 2014 Call For Presentations",
    "date": "2014-04-20",
    "dateLabel": "20 April 2014",
    "path": "reader/2014/cufp-cfp/",
    "categories": "CUFP · Call For Presentations · Conferences · Meta",
    "origin": "http://comonad.com/reader/2014/cufp-cfp/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/ee0faf03eca7bd7628dcd755.html",
    "rawSource": "content/original/corpus/ee0faf03eca7bd7628dcd755.html",
    "rawFormat": "html",
    "legacyId": "923",
    "retrieved": "2026-09-21",
    "sha256": "b84ba2ec8d6b6bbecf7bd91bb7e597959de307e0d91cec0dcaaa98105e525091",
    "archive": "source/articles/cufp-cfp.original.html.txt"
  },
  {
    "slug": "recursion-schemes-catamorphisms",
    "title": "Catamorphisms",
    "date": "2014-04-15",
    "dateLabel": "15 April 2014",
    "path": "reader/2014/recursion-schemes-catamorphisms/",
    "categories": "Haskell",
    "origin": "https://www.schoolofhaskell.com/user/edwardk/recursion-schemes/catamorphisms",
    "author": "Edward Kmett",
    "source": "School of Haskell",
    "rawHTML": "content/original/corpus/8b66740d0ee8cd7ada297cc8.html",
    "rawSource": "content/original/corpus/e1154a13f41bf133d66f892b.md",
    "rawFormat": "md",
    "rawURL": "https://www.schoolofhaskell.com/tutorial-raw/4906/9f247ee93e3ec7d8b226e906eb1d7648a1e57c76",
    "dateBasis": "Date displayed by School of Haskell; may reflect a later revision.",
    "series": "recursion-schemes",
    "seriesOrder": 1,
    "retrieved": "2026-09-21",
    "sha256": "84d4ad285d568cc938359f32a77ad3839e15ad244baa2ad76867b4d919768346",
    "archive": "source/articles/recursion-schemes-catamorphisms.original.md"
  },
  {
    "slug": "phoas",
    "title": "PHOAS For Free",
    "date": "2013-12-09",
    "dateLabel": "9 December 2013",
    "path": "reader/2013/phoas/",
    "categories": "Haskell",
    "origin": "https://www.schoolofhaskell.com/user/edwardk/phoas",
    "author": "Edward Kmett",
    "source": "School of Haskell",
    "rawHTML": "content/original/corpus/d17bf045173439595c83dfbf.html",
    "rawSource": "content/original/corpus/25ef8f1210cb0f36fde6ee4b.md",
    "rawFormat": "md",
    "rawURL": "https://www.schoolofhaskell.com/tutorial-raw/4906/07986d7545873d46a1bcc28b8fbe367f2f9fa5ab",
    "dateBasis": "Date displayed by School of Haskell; may reflect a later revision.",
    "retrieved": "2026-09-21",
    "sha256": "9c327d8f9d504d77551b3f55b1662b2aeb9e9605df721a235a72ff49ebfbda63",
    "archive": "source/articles/phoas.original.md"
  },
  {
    "slug": "oblivious-deamortized-st",
    "title": "Cache-Oblivious Data Structures — Part I: Deamortized ST",
    "date": "2013-11-08",
    "dateLabel": "8 November 2013",
    "path": "reader/2013/oblivious-deamortized-st/",
    "categories": "Haskell",
    "origin": "https://www.schoolofhaskell.com/user/edwardk/oblivious/deamortized-st",
    "author": "Edward Kmett",
    "source": "School of Haskell",
    "rawHTML": "content/original/corpus/c79a1acedebcb3771ee48c7f.html",
    "rawSource": "content/original/corpus/dbf50348ed361f4e6db353be.md",
    "rawFormat": "md",
    "rawURL": "https://www.schoolofhaskell.com/tutorial-raw/4906/4244d5709e256fd7dacdf3512e7d00334eafbc6b",
    "dateBasis": "Date displayed by School of Haskell; may reflect a later revision.",
    "series": "oblivious",
    "originalTitle": "Part I: Deamortized ST",
    "seriesOrder": 1,
    "retrieved": "2026-09-21",
    "sha256": "5d2b5169da71446b86739ff342e0700afa64f7fbb391d953e945e63a7be942eb",
    "archive": "source/articles/oblivious-deamortized-st.original.md"
  },
  {
    "slug": "editorial-procrustean-mathematics",
    "title": "Procrustean Mathematics",
    "date": "2013-11-08",
    "dateLabel": "8 November 2013",
    "path": "reader/2013/editorial-procrustean-mathematics/",
    "categories": "Haskell",
    "origin": "https://www.schoolofhaskell.com/user/edwardk/editorial/procrustean-mathematics",
    "author": "Edward Kmett",
    "source": "School of Haskell",
    "rawHTML": "content/original/corpus/24b40e9943ef856d9871cc75.html",
    "rawSource": "content/original/corpus/92880915dacbf1849e4408db.md",
    "rawFormat": "md",
    "rawURL": "https://www.schoolofhaskell.com/tutorial-raw/4906/97cc863d550b152cbbcf6a645709d80f16ba96cd",
    "dateBasis": "Date displayed by School of Haskell; may reflect a later revision.",
    "series": "editorial",
    "seriesOrder": 1,
    "retrieved": "2026-09-21",
    "sha256": "d88a18655615c5e29fa33187b158966aaf2ae18b8256e83a34a815f98e951776",
    "archive": "source/articles/editorial-procrustean-mathematics.original.md"
  },
  {
    "slug": "cellular-automata-part-3",
    "title": "Cellular Automata — Part III: A World in a Bottle",
    "date": "2013-09-15",
    "dateLabel": "15 September 2013",
    "path": "reader/2013/cellular-automata-part-3/",
    "categories": "Haskell",
    "origin": "https://www.schoolofhaskell.com/user/edwardk/cellular-automata/part-3",
    "author": "Edward Kmett",
    "source": "School of Haskell",
    "rawHTML": "content/original/corpus/a81f5b8ebe7c3fb5c1285a6f.html",
    "rawSource": "content/original/corpus/4883ae2c2d44cc80469bb460.md",
    "rawFormat": "md",
    "rawURL": "https://www.schoolofhaskell.com/tutorial-raw/4906/adea78b22dcf260126adedf58d7500caf297b583",
    "dateBasis": "Authorship date from the signed article footer. School of Haskell later displayed 2013-11-16 as the revision date. The existing URL is retained.",
    "series": "cellular-automata",
    "originalTitle": "Part III: A World in a Bottle",
    "seriesOrder": 3,
    "dateModified": "2013-11-16",
    "authoredDate": "2013-09-15",
    "retrieved": "2026-09-21",
    "sha256": "704791b9db0d43d48a6fbca61a7f48e0980d23ba860b28ca94ae3943fd67086b",
    "archive": "source/articles/cellular-automata-part-3.original.md"
  },
  {
    "slug": "conquering-folds",
    "title": "Conquering Folds",
    "date": "2013-09-13",
    "dateLabel": "13 September 2013",
    "path": "reader/2013/conquering-folds/",
    "categories": "Haskell",
    "origin": "https://www.schoolofhaskell.com/user/edwardk/conquering-folds",
    "author": "Edward Kmett",
    "source": "School of Haskell",
    "rawHTML": "content/original/corpus/6c2d11e532e6b0e69d59b86d.html",
    "rawSource": "content/original/corpus/85e5cbe833521c3cc87bd763.md",
    "rawFormat": "md",
    "rawURL": "https://www.schoolofhaskell.com/tutorial-raw/4906/e98386333725c466b7a765c0b9cf2518e4dc360f",
    "dateBasis": "Date displayed by School of Haskell; may reflect a later revision.",
    "retrieved": "2026-09-21",
    "sha256": "b9c4c80c7f2817d5fa796cfdc14f2646f587fcbf5883910c1ccda2dfc8dc22fd",
    "archive": "source/articles/conquering-folds.original.md"
  },
  {
    "slug": "parallel-crc",
    "title": "Parallel and Incremental CRCs",
    "date": "2013-09-11",
    "dateLabel": "11 September 2013",
    "path": "reader/2013/parallel-crc/",
    "categories": "Algorithms · Haskell",
    "origin": "https://www.schoolofhaskell.com/user/edwardk/parallel-crc",
    "author": "Edward Kmett",
    "source": "School of Haskell",
    "rawHTML": "content/original/corpus/1457ff0ee574486b64193df7.html",
    "rawSource": "content/original/corpus/abda21f5d356c060c66dd3de.md",
    "rawFormat": "md",
    "rawURL": "https://www.schoolofhaskell.com/tutorial-raw/4906/3310c904c4265dd33884d81f64bff43f7f927209",
    "dateBasis": "Date displayed by School of Haskell; may reflect a later revision.",
    "retrieved": "2026-09-21",
    "sha256": "1c8849db6e1aa5c436778b63d63ff02c9a7a7699198808db21a7690d697375f4",
    "archive": "source/articles/parallel-crc.original.md"
  },
  {
    "slug": "snippets-once",
    "title": "Once",
    "date": "2013-09-03",
    "dateLabel": "3 September 2013",
    "path": "reader/2013/snippets-once/",
    "categories": "Haskell",
    "origin": "https://www.schoolofhaskell.com/user/edwardk/snippets/once",
    "author": "Edward Kmett",
    "source": "School of Haskell",
    "rawHTML": "content/original/corpus/3def36f6413b06c0f0aa18ce.html",
    "rawSource": "content/original/corpus/f1ad9dbd9e0ec6f5513cc200.md",
    "rawFormat": "md",
    "rawURL": "https://www.schoolofhaskell.com/tutorial-raw/4906/52c9d1c864e897525f61e645d40e7d6a561f1c77",
    "dateBasis": "Date displayed by School of Haskell; may reflect a later revision.",
    "series": "snippets",
    "seriesOrder": 2,
    "retrieved": "2026-09-21",
    "sha256": "845af55d20586737778adfef891fc9339fb178255c848fe5410d5b1623ca09ba",
    "archive": "source/articles/snippets-once.original.md"
  },
  {
    "slug": "snippets-mandelbrot",
    "title": "Mandelbrot",
    "date": "2013-09-02",
    "dateLabel": "2 September 2013",
    "path": "reader/2013/snippets-mandelbrot/",
    "categories": "Haskell",
    "origin": "https://www.schoolofhaskell.com/user/edwardk/snippets/mandelbrot",
    "author": "Edward Kmett",
    "source": "School of Haskell",
    "rawHTML": "content/original/corpus/e5a9b4bfd735dae2f2e71599.html",
    "rawSource": "content/original/corpus/adfa97de2be831c784d42b96.md",
    "rawFormat": "md",
    "rawURL": "https://www.schoolofhaskell.com/tutorial-raw/4906/5075dba7d5304c8f12a24c282c3d243564ea9e0a",
    "dateBasis": "Authorship date from the signed article footer. School of Haskell later displayed 2013-09-03 as the revision date. The existing URL is retained.",
    "series": "snippets",
    "seriesOrder": 3,
    "dateModified": "2013-09-03",
    "authoredDate": "2013-09-02",
    "retrieved": "2026-09-21",
    "sha256": "78f1e63be2c5ce9b797b20f48d2bd9e2d034dd3b76eff9e676e6bbea8e4e05bd",
    "archive": "source/articles/snippets-mandelbrot.original.md"
  },
  {
    "slug": "cellular-automata-part-2",
    "title": "Cellular Automata — Part II: PNGs and Moore",
    "date": "2013-09-01",
    "dateLabel": "1 September 2013",
    "path": "reader/2015/cellular-automata-part-2/",
    "categories": "Haskell",
    "origin": "https://www.schoolofhaskell.com/user/edwardk/cellular-automata/part-2",
    "author": "Edward Kmett",
    "source": "School of Haskell",
    "rawHTML": "content/original/corpus/d574eb9ed049ee1e9984c466.html",
    "rawSource": "content/original/corpus/6f6f69b9cc40609b9a22cafe.md",
    "rawFormat": "md",
    "rawURL": "https://www.schoolofhaskell.com/tutorial-raw/4906/604212fe84a3e9f477c2f975737b8e05d70a941f",
    "dateBasis": "Authorship date from the signed article footer. School of Haskell later displayed 2015-06-10 as the revision date. The existing URL is retained.",
    "series": "cellular-automata",
    "originalTitle": "Part II: PNGs and Moore",
    "seriesOrder": 2,
    "dateModified": "2015-06-10",
    "authoredDate": "2013-09-01",
    "retrieved": "2026-09-21",
    "sha256": "066e7cbf555b71506da20ee8b4dc946b55477d599eacb77804681bdc8bd819e4",
    "archive": "source/articles/cellular-automata-part-2.original.md"
  },
  {
    "slug": "revisiting-matrix-multiplication-part-6",
    "title": "Revisiting Matrix Multiplication — Part VI: A Most Significant Comparison",
    "date": "2013-08-25",
    "dateLabel": "25 August 2013",
    "path": "reader/2013/revisiting-matrix-multiplication-part-6/",
    "categories": "Haskell",
    "origin": "https://www.schoolofhaskell.com/user/edwardk/revisiting-matrix-multiplication/part-6",
    "author": "Edward Kmett",
    "source": "School of Haskell",
    "rawHTML": "content/original/corpus/9d0096171b33dccf29cb31ce.html",
    "rawSource": "content/original/corpus/9859fd8454605faf2dc4e119.md",
    "rawFormat": "md",
    "rawURL": "https://www.schoolofhaskell.com/tutorial-raw/4906/fa630871f2e42363a2ebddceb1c6878594eccc6b",
    "dateBasis": "Date displayed by School of Haskell; may reflect a later revision.",
    "series": "revisiting-matrix-multiplication",
    "originalTitle": "Part VI: A Most Significant Comparison",
    "seriesOrder": 6,
    "retrieved": "2026-09-21",
    "sha256": "3a9341edbef711008af8fccf2377fb1d3ad009a0c07fa989e2a063c7b0f9680e",
    "archive": "source/articles/revisiting-matrix-multiplication-part-6.original.md"
  },
  {
    "slug": "revisiting-matrix-multiplication-part-4",
    "title": "Revisiting Matrix Multiplication — Part IV: IntMap!?",
    "date": "2013-08-25",
    "dateLabel": "25 August 2013",
    "path": "reader/2013/revisiting-matrix-multiplication-part-4/",
    "categories": "Haskell",
    "origin": "https://www.schoolofhaskell.com/user/edwardk/revisiting-matrix-multiplication/part-4",
    "author": "Edward Kmett",
    "source": "School of Haskell",
    "rawHTML": "content/original/corpus/fce096f2a2010c6a78491261.html",
    "rawSource": "content/original/corpus/70b3b22050550f3226171f87.md",
    "rawFormat": "md",
    "rawURL": "https://www.schoolofhaskell.com/tutorial-raw/4906/4892553edbb35ab05743b820e3d3f17b88343c66",
    "dateBasis": "Date displayed by School of Haskell; may reflect a later revision.",
    "series": "revisiting-matrix-multiplication",
    "originalTitle": "Part IV: IntMap!?",
    "seriesOrder": 4,
    "retrieved": "2026-09-21",
    "sha256": "957a1f2121091601ee5448e723c37bc8e82edd198fc16fb88a1a0dc673d4188a",
    "archive": "source/articles/revisiting-matrix-multiplication-part-4.original.md"
  },
  {
    "slug": "revisiting-matrix-multiplication-part-3",
    "title": "Revisiting Matrix Multiplication — Part III: Extending Vector",
    "date": "2013-08-25",
    "dateLabel": "25 August 2013",
    "path": "reader/2013/revisiting-matrix-multiplication-part-3/",
    "categories": "Haskell",
    "origin": "https://www.schoolofhaskell.com/user/edwardk/revisiting-matrix-multiplication/part-3",
    "author": "Edward Kmett",
    "source": "School of Haskell",
    "rawHTML": "content/original/corpus/6b5f9152f5fe1939ce2cdd2f.html",
    "rawSource": "content/original/corpus/5a62211b97d2d50f7d26295c.md",
    "rawFormat": "md",
    "rawURL": "https://www.schoolofhaskell.com/tutorial-raw/4906/c9948ec20386ad678e5f35781e4854b172e6308a",
    "dateBasis": "Date displayed by School of Haskell; may reflect a later revision.",
    "series": "revisiting-matrix-multiplication",
    "originalTitle": "Part III: Extending Vector",
    "seriesOrder": 3,
    "retrieved": "2026-09-21",
    "sha256": "84bafc3096b93b46cde773340c6a534ced19de063c24ceaec48d5331f6deae2e",
    "archive": "source/articles/revisiting-matrix-multiplication-part-3.original.md"
  },
  {
    "slug": "revisiting-matrix-multiplication-part-2",
    "title": "Revisiting Matrix Multiplication — Part II: The Zen of Z-Ordering",
    "date": "2013-08-25",
    "dateLabel": "25 August 2013",
    "path": "reader/2013/revisiting-matrix-multiplication-part-2/",
    "categories": "Haskell",
    "origin": "https://www.schoolofhaskell.com/user/edwardk/revisiting-matrix-multiplication/part-2",
    "author": "Edward Kmett",
    "source": "School of Haskell",
    "rawHTML": "content/original/corpus/877dac641032ceaadf946f18.html",
    "rawSource": "content/original/corpus/51f419b87492a70a3d2f9ac2.md",
    "rawFormat": "md",
    "rawURL": "https://www.schoolofhaskell.com/tutorial-raw/4906/99e5ad65aa6415d56184e2621cde1187820b2b7d",
    "dateBasis": "Date displayed by School of Haskell; may reflect a later revision.",
    "series": "revisiting-matrix-multiplication",
    "originalTitle": "Part II: The Zen of Z-Ordering",
    "seriesOrder": 2,
    "retrieved": "2026-09-21",
    "sha256": "d40890755f366985ade280281b851ff8dd3a05f935c190e5a1689f4df3dd1b00",
    "archive": "source/articles/revisiting-matrix-multiplication-part-2.original.md"
  },
  {
    "slug": "revisiting-matrix-multiplication-part-1",
    "title": "Revisiting Matrix Multiplication — Part I: Bit Shuffling with Lenses and Isomorphisms",
    "date": "2013-08-25",
    "dateLabel": "25 August 2013",
    "path": "reader/2013/revisiting-matrix-multiplication-part-1/",
    "categories": "Haskell",
    "origin": "https://www.schoolofhaskell.com/user/edwardk/revisiting-matrix-multiplication/part-1",
    "author": "Edward Kmett",
    "source": "School of Haskell",
    "rawHTML": "content/original/corpus/6b8ec81c35e3698a0d1aa801.html",
    "rawSource": "content/original/corpus/4f17dfa96cb53d09b9993e31.md",
    "rawFormat": "md",
    "rawURL": "https://www.schoolofhaskell.com/tutorial-raw/4906/499f6f6ad03e6dc2feab4905f94308e5417e7458",
    "dateBasis": "Date displayed by School of Haskell; may reflect a later revision.",
    "series": "revisiting-matrix-multiplication",
    "originalTitle": "Part I: Bit Shuffling with Lenses and Isomorphisms",
    "seriesOrder": 1,
    "retrieved": "2026-09-21",
    "sha256": "f873f97d588617b65e356bca18011617733908616f51b2bc4c8b66288e4d1160",
    "archive": "source/articles/revisiting-matrix-multiplication-part-1.original.md"
  },
  {
    "slug": "cellular-automata-part-1",
    "title": "Cellular Automata — Part I: From Theory to Pretty Pictures",
    "date": "2013-08-15",
    "dateLabel": "15 August 2013",
    "path": "reader/2014/cellular-automata-part-1/",
    "categories": "Haskell",
    "origin": "https://www.schoolofhaskell.com/user/edwardk/cellular-automata/part-1",
    "author": "Edward Kmett",
    "source": "School of Haskell",
    "rawHTML": "content/original/corpus/3fefaefb79218aac6b117705.html",
    "rawSource": "content/original/corpus/bc357760cd1fe01afd085626.md",
    "rawFormat": "md",
    "rawURL": "https://www.schoolofhaskell.com/tutorial-raw/4906/2a6140398ce46eceac790037f4afbd66c3b9c7c5",
    "dateBasis": "Authorship date from the signed article footer. School of Haskell later displayed 2014-11-29 as the revision date. The existing URL is retained.",
    "series": "cellular-automata",
    "originalTitle": "Part I: From Theory to Pretty Pictures",
    "seriesOrder": 1,
    "dateModified": "2014-11-29",
    "authoredDate": "2013-08-15",
    "retrieved": "2026-09-21",
    "sha256": "49254982d1c94327019b33d2a368c4f130bf083513a27a57e8f5c96952debe1c",
    "archive": "source/articles/cellular-automata-part-1.original.md"
  },
  {
    "slug": "representing-applicatives",
    "title": "Representing Applicatives",
    "date": "2013-05-02",
    "dateLabel": "2 May 2013",
    "path": "reader/2013/representing-applicatives/",
    "categories": "Uncategorized",
    "origin": "http://comonad.com/reader/2013/representing-applicatives/",
    "author": "Gershom Bazerman",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/dbdf2e5c1f78a98171249552.html",
    "rawSource": "content/original/corpus/dbdf2e5c1f78a98171249552.html",
    "rawFormat": "html",
    "series": "applicatives",
    "seriesOrder": 3,
    "retrieved": "2026-09-21",
    "sha256": "dd540a892533158cc03639c9197891cf7ed981add2c5242dd7f7abf558ffe2b4",
    "archive": "source/articles/representing-applicatives.original.html.txt"
  },
  {
    "slug": "japanese-workshop-1",
    "title": "Japanese “ekmett” Workshop (Part 1 of 2)",
    "date": "2013-04-01",
    "dateLabel": "1 April 2013",
    "path": "reader/2013/japanese-workshop-1/",
    "categories": "Japan · Lenses · Mathematics",
    "origin": "http://comonad.com/reader/2013/japanese-workshop-1/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/6aa9749dd9485c3fe2e686f3.html",
    "rawSource": "content/original/corpus/6aa9749dd9485c3fe2e686f3.html",
    "rawFormat": "html",
    "legacyId": "831",
    "retrieved": "2026-09-21",
    "sha256": "88cbfd765f84304dcaf446773237b52117df74b6ffbcdf2c711edb59a8ca40ab",
    "archive": "source/articles/japanese-workshop-1.original.html.txt"
  },
  {
    "slug": "algebras-of-applicatives",
    "title": "Algebras of Applicatives",
    "date": "2013-01-11",
    "dateLabel": "11 January 2013",
    "path": "reader/2013/algebras-of-applicatives/",
    "categories": "Uncategorized",
    "origin": "http://comonad.com/reader/2013/algebras-of-applicatives/",
    "author": "Gershom Bazerman",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/ab323cdc1b95356ed9701073.html",
    "rawSource": "content/original/corpus/ab323cdc1b95356ed9701073.html",
    "rawFormat": "html",
    "series": "applicatives",
    "seriesOrder": 2,
    "retrieved": "2026-09-21",
    "sha256": "e36ea8fb9b9fa1161edd11fef3511519497296944aa8b82899f89a4b8f399bd6",
    "archive": "source/articles/algebras-of-applicatives.original.html.txt"
  },
  {
    "slug": "abstracting-with-applicatives",
    "title": "Abstracting with Applicatives",
    "date": "2012-12-26",
    "dateLabel": "26 December 2012",
    "path": "reader/2012/abstracting-with-applicatives/",
    "categories": "Category Theory · Data Structures · Monoids",
    "origin": "http://comonad.com/reader/2012/abstracting-with-applicatives/",
    "author": "Gershom Bazerman",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/a4d2ddb09de01a42e85583f0.html",
    "rawSource": "content/original/corpus/a4d2ddb09de01a42e85583f0.html",
    "rawFormat": "html",
    "series": "applicatives",
    "seriesOrder": 1,
    "retrieved": "2026-09-21",
    "sha256": "62e65be292584b7a1779960f61451dee8d0e113f9c93bda6772be6db6179b2a3",
    "archive": "source/articles/abstracting-with-applicatives.original.html.txt"
  },
  {
    "slug": "natural-deduction-sequent-calculus-and-type-classes",
    "title": "Natural Deduction, Sequent Calculus and Type Classes",
    "date": "2012-12-07",
    "dateLabel": "7 December 2012",
    "path": "reader/2012/natural-deduction-sequent-calculus-and-type-classes/",
    "categories": "Uncategorized",
    "origin": "http://comonad.com/reader/2012/natural-deduction-sequent-calculus-and-type-classes/",
    "author": "Dan Doel",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/43af24b12978e562e1c59ed6.html",
    "rawSource": "content/original/corpus/43af24b12978e562e1c59ed6.html",
    "rawFormat": "html",
    "retrieved": "2026-09-21",
    "sha256": "2c7e6f45b22211ef7596c51ad715356c5515b4c5ed88526adeb5d26153057261",
    "archive": "source/articles/natural-deduction-sequent-calculus-and-type-classes.original.html.txt"
  },
  {
    "slug": "unnatural-transformations-and-quantifiers",
    "title": "Unnatural Transformations and Quantifiers",
    "date": "2012-09-22",
    "dateLabel": "22 September 2012",
    "path": "reader/2012/unnatural-transformations-and-quantifiers/",
    "categories": "Category Theory · Haskell · Kan Extensions · Mathematics · Monads",
    "origin": "http://comonad.com/reader/2012/unnatural-transformations-and-quantifiers/",
    "author": "Dan Doel",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/93e6cb7111dee8a00894e2c1.html",
    "rawSource": "content/original/corpus/93e6cb7111dee8a00894e2c1.html",
    "rawFormat": "html",
    "legacyId": "660",
    "retrieved": "2026-09-21",
    "sha256": "0e5c8cfa13a2a06a9509a4c2656e85469a45bb9ed3488fd6f73e1b010b3cb908",
    "archive": "source/articles/unnatural-transformations-and-quantifiers.original.html.txt"
  },
  {
    "slug": "hackage-mirror",
    "title": "Working around Hackage Outages",
    "date": "2012-08-29",
    "dateLabel": "29 August 2012",
    "path": "reader/2012/hackage-mirror/",
    "categories": "Haskell · Infrastructure",
    "origin": "http://comonad.com/reader/2012/hackage-mirror/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/f858544dd2169820fee0c6a5.html",
    "rawSource": "content/original/corpus/f858544dd2169820fee0c6a5.html",
    "rawFormat": "html",
    "retrieved": "2026-09-21",
    "sha256": "90c5b050d51511c5002e6a92245f68f616ba26d291a2c80edbc78fce526b6d48",
    "archive": "source/articles/hackage-mirror.original.html.txt"
  },
  {
    "slug": "mirrored-lenses",
    "title": "Mirrored Lenses",
    "date": "2012-06-24",
    "dateLabel": "24 June 2012",
    "path": "reader/2012/mirrored-lenses/",
    "categories": "Algorithms · Data Structures · Haskell · Lenses",
    "origin": "http://comonad.com/reader/2012/mirrored-lenses/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/d8773b23f906a5bf25be247b.html",
    "rawSource": "content/original/corpus/d8773b23f906a5bf25be247b.html",
    "rawFormat": "html",
    "legacyId": "600",
    "retrieved": "2026-09-21",
    "sha256": "f4b6906556511c01663a29a326a28a339e1606e7aa799c67cefd3e3721228f2c",
    "archive": "source/articles/mirrored-lenses.original.html.txt"
  },
  {
    "slug": "wheres-waldo",
    "title": "Where’s Waldo?",
    "date": "2012-06-10",
    "dateLabel": "10 June 2012",
    "path": "reader/2012/wheres-waldo/",
    "categories": "Haskell",
    "origin": "http://comonad.com/reader/2012/wheres-waldo/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/f8c4acb3e891979c896e9213.html",
    "rawSource": "content/original/corpus/f8c4acb3e891979c896e9213.html",
    "rawFormat": "html",
    "retrieved": "2026-09-21",
    "sha256": "f0abec34b6c2c16f3b7c75c49ddce3f20a16a7bd3428ed449eddda8752c507bc",
    "archive": "source/articles/wheres-waldo.original.html.txt"
  },
  {
    "slug": "catamorphism-knol",
    "title": "Catamorphism Knol",
    "date": "2012-05-27",
    "dateLabel": "27 May 2012",
    "path": "reader/2012/catamorphism-knol/",
    "categories": "Category Theory",
    "origin": "http://comonad.com/reader/2012/catamorphism-knol/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/2f632db006c3e1ac5764aae7.html",
    "rawSource": "content/original/corpus/2f632db006c3e1ac5764aae7.html",
    "rawFormat": "html",
    "retrieved": "2026-09-21",
    "sha256": "bc5b34d091d522715f75ec5c79cb5967bf88c5bc291ec46d0da513cb1263b04a",
    "archive": "source/articles/catamorphism-knol.original.html.txt"
  },
  {
    "slug": "wadlers-law-revisited",
    "title": "Wadler’s Law Revisited",
    "date": "2012-04-02",
    "dateLabel": "2 April 2012",
    "path": "reader/2012/wadlers-law-revisited/",
    "categories": "Haskell · Meta",
    "origin": "http://comonad.com/reader/2012/wadlers-law-revisited/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/acbf6518b96828488dc1d8a6.html",
    "rawSource": "content/original/corpus/acbf6518b96828488dc1d8a6.html",
    "rawFormat": "html",
    "legacyId": "571",
    "retrieved": "2026-09-21",
    "sha256": "f5677391fa19f2011e7c582de308c941dfac9823f417e35b136d200303431b7c",
    "archive": "source/articles/wadlers-law-revisited.original.html.txt"
  },
  {
    "slug": "searching-infinity",
    "title": "Searching Infinity Parametrically",
    "date": "2011-12-25",
    "dateLabel": "25 December 2011",
    "path": "reader/2011/searching-infinity/",
    "categories": "Algorithms · Haskell · Kan Extensions · Logic · Mathematics · Monads · Type Hackery",
    "origin": "http://comonad.com/reader/2011/searching-infinity/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/a29a65d893fdc82eb0f081cc.html",
    "rawSource": "content/original/corpus/a29a65d893fdc82eb0f081cc.html",
    "rawFormat": "html",
    "legacyId": "510",
    "retrieved": "2026-09-21",
    "sha256": "1eb9dce8b7d5d17b4db1d1011d51bd7e17cb56a98c900d5e0609d22ff8802e69",
    "archive": "source/articles/searching-infinity.original.html.txt"
  },
  {
    "slug": "what-constraints-entail-part-2",
    "title": "What Constraints Entail: Part 2",
    "date": "2011-11-03",
    "dateLabel": "3 November 2011",
    "path": "reader/2011/what-constraints-entail-part-2/",
    "categories": "Constraint Kinds · Haskell · Logic · Monads · Type Hackery · Uncategorized",
    "origin": "http://comonad.com/reader/2011/what-constraints-entail-part-2/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/b9d99a850e678e678a3ac805.html",
    "rawSource": "content/original/corpus/b9d99a850e678e678a3ac805.html",
    "rawFormat": "html",
    "legacyId": "461",
    "series": "what-constraints-entail",
    "seriesOrder": 2,
    "retrieved": "2026-09-21",
    "sha256": "f5e235ab36b10749c492780bc27cb5749a5547282c8b1ce540648c38b160b09c",
    "archive": "source/articles/what-constraints-entail-part-2.original.html.txt"
  },
  {
    "slug": "what-constraints-entail-part-1",
    "title": "What Constraints Entail: Part 1",
    "date": "2011-11-03",
    "dateLabel": "3 November 2011",
    "path": "reader/2011/what-constraints-entail-part-1/",
    "categories": "Category Theory · Constraint Kinds · Haskell · Logic · Monads · Type Hackery · Uncategorized",
    "origin": "http://comonad.com/reader/2011/what-constraints-entail-part-1/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/2c326e37f09fbe0b8b3b3c1f.html",
    "rawSource": "content/original/corpus/2c326e37f09fbe0b8b3b3c1f.html",
    "rawFormat": "html",
    "legacyId": "430",
    "series": "what-constraints-entail",
    "seriesOrder": 1,
    "retrieved": "2026-09-21",
    "sha256": "bd3edbc3d1913b0ae2612270754abe17dacaa22aecab12da72a75f64a7336df0",
    "archive": "source/articles/what-constraints-entail-part-1.original.html.txt"
  },
  {
    "slug": "homotopy-and-directed-type-theory-slides",
    "title": "Homotopy and Directed Type Theory Slides",
    "date": "2011-10-27",
    "dateLabel": "27 October 2011",
    "path": "reader/2011/homotopy-and-directed-type-theory-slides/",
    "categories": "Boston Haskell · Category Theory · Haskell · Type Theory",
    "origin": "http://comonad.com/reader/2011/homotopy-and-directed-type-theory-slides/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/bf754c6f82fb9530dca144a2.html",
    "rawSource": "content/original/corpus/bf754c6f82fb9530dca144a2.html",
    "rawFormat": "html",
    "retrieved": "2026-09-21",
    "sha256": "61bd4240758c8c159e6b82ceb04d28cc12706c190fa55857b0e83fa8cdf16632",
    "archive": "source/articles/homotopy-and-directed-type-theory-slides.original.html.txt"
  },
  {
    "slug": "hac-boston",
    "title": "Hac Boston!",
    "date": "2011-10-25",
    "dateLabel": "25 October 2011",
    "path": "reader/2011/hac-boston/",
    "categories": "Boston Haskell · Hac Boston · Haskell",
    "origin": "http://comonad.com/reader/2011/hac-boston/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/e80fd11c09f12548530f157a.html",
    "rawSource": "content/original/corpus/e80fd11c09f12548530f157a.html",
    "rawFormat": "html",
    "retrieved": "2026-09-21",
    "sha256": "94030b4bc5d45914b11cd5f7355ac923c23864725a538cd4c9521802bd3f02d9",
    "archive": "source/articles/hac-boston.original.html.txt"
  },
  {
    "slug": "a-parsec-full-of-rats-part-2",
    "title": "A Parsec Full of Rats, Part 2",
    "date": "2011-09-23",
    "dateLabel": "23 September 2011",
    "path": "reader/2011/a-parsec-full-of-rats-part-2/",
    "categories": "Algorithms · Data Structures · Haskell · Monads · Parsing · Uncategorized",
    "origin": "http://comonad.com/reader/2011/a-parsec-full-of-rats-part-2/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/addfcc9b01ec393709b44f7b.html",
    "rawSource": "content/original/corpus/addfcc9b01ec393709b44f7b.html",
    "rawFormat": "html",
    "legacyId": "397",
    "series": "a-parsec-full-of-rats",
    "seriesOrder": 2,
    "retrieved": "2026-09-21",
    "sha256": "5e4b0c996e71758ec44d794f12529cd2d585f9fc1437d51e56fc6d4241bd0cdd",
    "archive": "source/articles/a-parsec-full-of-rats-part-2.original.html.txt"
  },
  {
    "slug": "a-parsec-full-of-rats",
    "title": "A Parsec Full of Rats, Part 1",
    "date": "2011-09-23",
    "dateLabel": "23 September 2011",
    "path": "reader/2011/a-parsec-full-of-rats/",
    "categories": "Algorithms · Data Structures · Haskell · Monads · Parsing · Uncategorized",
    "origin": "http://comonad.com/reader/2011/a-parsec-full-of-rats/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/f9d846723bea758f226b6d72.html",
    "rawSource": "content/original/corpus/f9d846723bea758f226b6d72.html",
    "rawFormat": "html",
    "legacyId": "380",
    "series": "a-parsec-full-of-rats",
    "seriesOrder": 1,
    "retrieved": "2026-09-21",
    "sha256": "2bebb02a66736d6d8c987401f5998b0f06a8cb5ae56f42acea377084934e89fb",
    "archive": "source/articles/a-parsec-full-of-rats.original.html.txt"
  },
  {
    "slug": "free-modules-and-functional-linear-functionals",
    "title": "Free Modules and Functional Linear Functionals",
    "date": "2011-07-11",
    "dateLabel": "11 July 2011",
    "path": "reader/2011/free-modules-and-functional-linear-functionals/",
    "categories": "Algorithms · Category Theory · Data Structures · Haskell · Linear Algebra · Monads · Monoids · Type Hackery",
    "origin": "http://comonad.com/reader/2011/free-modules-and-functional-linear-functionals/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/4881676ccbe4ad3075ba2bdf.html",
    "rawSource": "content/original/corpus/4881676ccbe4ad3075ba2bdf.html",
    "rawFormat": "html",
    "legacyId": "356",
    "retrieved": "2026-09-21",
    "sha256": "8a8f1876e0d5711af4cc209a3123a8f33727483b32a2f66bd34d585ef1f8570d",
    "archive": "source/articles/free-modules-and-functional-linear-functionals.original.html.txt"
  },
  {
    "slug": "a-product-of-an-imperfect-union",
    "title": "A Product of an Imperfect Union",
    "date": "2011-06-30",
    "dateLabel": "30 June 2011",
    "path": "reader/2011/a-product-of-an-imperfect-union/",
    "categories": "Category Theory · Comonads · Haskell · Kan Extensions · Monads",
    "origin": "http://comonad.com/reader/2011/a-product-of-an-imperfect-union/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/efc0b4425795e319138377e4.html",
    "rawSource": "content/original/corpus/efc0b4425795e319138377e4.html",
    "rawFormat": "html",
    "legacyId": "337",
    "series": "monads-from-comonads",
    "seriesOrder": 4,
    "retrieved": "2026-09-21",
    "sha256": "4a0b35af746c4fb269f9216e6cef3091ebca83757d2afc98237012a32446a321",
    "archive": "source/articles/a-product-of-an-imperfect-union.original.html.txt"
  },
  {
    "slug": "more-on-comonads-as-monad-transformers",
    "title": "More on Comonads as Monad Transformers",
    "date": "2011-06-30",
    "dateLabel": "30 June 2011",
    "path": "reader/2011/more-on-comonads-as-monad-transformers/",
    "categories": "Category Theory · Comonads · Haskell · Kan Extensions · Monads",
    "origin": "http://comonad.com/reader/2011/more-on-comonads-as-monad-transformers/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/9a277b69866cffbd67af9093.html",
    "rawSource": "content/original/corpus/9a277b69866cffbd67af9093.html",
    "rawFormat": "html",
    "legacyId": "328",
    "series": "monads-from-comonads",
    "seriesOrder": 3,
    "retrieved": "2026-09-21",
    "sha256": "f59bed424d9ab26e7a26a5c8f04e0c3734822802c8d442388368a809a04b1d87",
    "archive": "source/articles/more-on-comonads-as-monad-transformers.original.html.txt"
  },
  {
    "slug": "monad-transformers-from-comonads",
    "title": "Monad Transformers from Comonads",
    "date": "2011-06-28",
    "dateLabel": "28 June 2011",
    "path": "reader/2011/monad-transformers-from-comonads/",
    "categories": "Category Theory · Comonads · Data Structures · Haskell · Kan Extensions · Monads",
    "origin": "http://comonad.com/reader/2011/monad-transformers-from-comonads/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/3889fe429d58a30ebad4601d.html",
    "rawSource": "content/original/corpus/3889fe429d58a30ebad4601d.html",
    "rawFormat": "html",
    "legacyId": "321",
    "series": "monads-from-comonads",
    "seriesOrder": 2,
    "retrieved": "2026-09-21",
    "sha256": "972ddee438591a745202a2bf9de4ebb0f2fe2ce4bc71ee527e530f5e9a204cd7",
    "archive": "source/articles/monad-transformers-from-comonads.original.html.txt"
  },
  {
    "slug": "monads-from-comonads",
    "title": "Monads from Comonads",
    "date": "2011-06-27",
    "dateLabel": "27 June 2011",
    "path": "reader/2011/monads-from-comonads/",
    "categories": "Category Theory · Comonads · Haskell · Kan Extensions · Mathematics · Monads",
    "origin": "http://comonad.com/reader/2011/monads-from-comonads/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/de9a358fc36178db2c60e8bf.html",
    "rawSource": "content/original/corpus/de9a358fc36178db2c60e8bf.html",
    "rawFormat": "html",
    "legacyId": "291",
    "series": "monads-from-comonads",
    "seriesOrder": 1,
    "retrieved": "2026-09-21",
    "sha256": "477765fa65557caded600d3acfcec62a75b90e0258cc714551a83ff3a8656caf",
    "archive": "source/articles/monads-from-comonads.original.html.txt"
  },
  {
    "slug": "free-monads-for-less-3",
    "title": "Free Monads for Less (Part 3 of 3): Yielding IO",
    "date": "2011-06-24",
    "dateLabel": "24 June 2011",
    "path": "reader/2011/free-monads-for-less-3/",
    "categories": "Algorithms · Category Theory · Comonads · Data Structures · Haskell · Kan Extensions · Monads",
    "origin": "http://comonad.com/reader/2011/free-monads-for-less-3/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/878af0b5d85503c63221d3ba.html",
    "rawSource": "content/original/corpus/878af0b5d85503c63221d3ba.html",
    "rawFormat": "html",
    "legacyId": "251",
    "series": "free-monads-for-less",
    "seriesOrder": 3,
    "retrieved": "2026-09-21",
    "sha256": "06a653505801b33abaa692fe1cb3d5bac24bb9ac635826c70689b33de0da35d2",
    "archive": "source/articles/free-monads-for-less-3.original.html.txt"
  },
  {
    "slug": "free-monads-for-less-2",
    "title": "Free Monads for Less (Part 2 of 3): Yoneda",
    "date": "2011-06-23",
    "dateLabel": "23 June 2011",
    "path": "reader/2011/free-monads-for-less-2/",
    "categories": "Algorithms · Category Theory · Data Structures · Haskell · Kan Extensions · Mathematics · Monads",
    "origin": "http://comonad.com/reader/2011/free-monads-for-less-2/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/29832ea55e9362ff1e44c667.html",
    "rawSource": "content/original/corpus/29832ea55e9362ff1e44c667.html",
    "rawFormat": "html",
    "legacyId": "243",
    "series": "free-monads-for-less",
    "seriesOrder": 2,
    "retrieved": "2026-09-21",
    "sha256": "4f3fa022b0084bfe0ea6226145fe49814a2dd1e85ef1f48562086f25a919255f",
    "archive": "source/articles/free-monads-for-less-2.original.html.txt"
  },
  {
    "slug": "free-monads-for-less",
    "title": "Free Monads for Less (Part 1 of 3): Codensity",
    "date": "2011-06-23",
    "dateLabel": "23 June 2011",
    "path": "reader/2011/free-monads-for-less/",
    "categories": "Algorithms · Category Theory · Data Structures · Haskell · Kan Extensions · Monads",
    "origin": "http://comonad.com/reader/2011/free-monads-for-less/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/3d111298b5de18e86c50f0bb.html",
    "rawSource": "content/original/corpus/3d111298b5de18e86c50f0bb.html",
    "rawFormat": "html",
    "legacyId": "218",
    "series": "free-monads-for-less",
    "seriesOrder": 1,
    "retrieved": "2026-09-21",
    "sha256": "3cfe3237b71cfb5d942c42d40a837eea56461e3aceef624a0d0c2fcfffc6b082",
    "archive": "source/articles/free-monads-for-less.original.html.txt"
  },
  {
    "slug": "introducing-speculation",
    "title": "Introducing Speculation",
    "date": "2010-07-22",
    "dateLabel": "22 July 2010",
    "path": "reader/2010/introducing-speculation/",
    "categories": "Algorithms · Boston Haskell · Haskell",
    "origin": "http://comonad.com/reader/2010/introducing-speculation/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/c03ee4e516225506bf9cfd6c.html",
    "rawSource": "content/original/corpus/c03ee4e516225506bf9cfd6c.html",
    "rawFormat": "html",
    "legacyId": "205",
    "retrieved": "2026-09-21",
    "sha256": "ec35ed649a05c7fc8ac615b7cfdeef6384d812a67e7a9c63314066b37f6a1d73",
    "archive": "source/articles/introducing-speculation.original.html.txt"
  },
  {
    "slug": "boston-haskell-june",
    "title": "Boston Haskell June",
    "date": "2010-05-20",
    "dateLabel": "20 May 2010",
    "path": "reader/2010/boston-haskell-june/",
    "categories": "Boston Haskell · Haskell",
    "origin": "http://comonad.com/reader/2010/boston-haskell-june/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/509811ce37a493dc422cd9bc.html",
    "rawSource": "content/original/corpus/509811ce37a493dc422cd9bc.html",
    "rawFormat": "html",
    "legacyId": "202",
    "retrieved": "2026-09-21",
    "sha256": "780225fbf365c9349f9fe76d9b7c4cac617e7339f233de9c4fd90b9efc2a7ba7",
    "archive": "source/articles/boston-haskell-june.original.html.txt"
  },
  {
    "slug": "hac-phi",
    "title": "Hac Phi",
    "date": "2010-05-20",
    "dateLabel": "20 May 2010",
    "path": "reader/2010/hac-phi/",
    "categories": "Haskell",
    "origin": "http://comonad.com/reader/2010/hac-phi/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/3f9e2a73a7412afe331236fb.html",
    "rawSource": "content/original/corpus/3f9e2a73a7412afe331236fb.html",
    "rawFormat": "html",
    "retrieved": "2026-09-21",
    "sha256": "342ba012d4ebe1245723d1b91b96b0d6337fa8111693da29a57fa1bc18f8ba04",
    "archive": "source/articles/hac-phi.original.html.txt"
  },
  {
    "slug": "brodal-okasaki-heaps-in-haskell",
    "title": "Brodal-Okasaki Heaps in Haskell",
    "date": "2010-05-15",
    "dateLabel": "15 May 2010",
    "path": "reader/2010/brodal-okasaki-heaps-in-haskell/",
    "categories": "Algorithms · Data Structures · Haskell · Monoids",
    "origin": "http://comonad.com/reader/2010/brodal-okasaki-heaps-in-haskell/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/7fdf989b539ddd7a5a336d28.html",
    "rawSource": "content/original/corpus/7fdf989b539ddd7a5a336d28.html",
    "rawFormat": "html",
    "legacyId": "187",
    "retrieved": "2026-09-21",
    "sha256": "22ec9080c6aa861c7925a1aa997a6ef6e5f61dbc48b9f7739701172d174b0125",
    "archive": "source/articles/brodal-okasaki-heaps-in-haskell.original.html.txt"
  },
  {
    "slug": "reverse-mode-automatic-differentiation-in-haskell",
    "title": "Reverse-Mode Automatic Differentiation in Haskell",
    "date": "2010-05-15",
    "dateLabel": "15 May 2010",
    "path": "reader/2010/reverse-mode-automatic-differentiation-in-haskell/",
    "categories": "Algorithms · Haskell · Mathematics",
    "origin": "http://comonad.com/reader/2010/reverse-mode-automatic-differentiation-in-haskell/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/58fe2e2b5a079832f05ab65c.html",
    "rawSource": "content/original/corpus/58fe2e2b5a079832f05ab65c.html",
    "rawFormat": "html",
    "legacyId": "183",
    "retrieved": "2026-09-21",
    "sha256": "d2713d0971fb568791eae9466795a7c89cf3f8c606bf4dabd2dda0635e20ef70",
    "archive": "source/articles/reverse-mode-automatic-differentiation-in-haskell.original.html.txt"
  },
  {
    "slug": "finger-trees",
    "title": "Finger Trees",
    "date": "2010-04-29",
    "dateLabel": "29 April 2010",
    "path": "reader/2010/finger-trees/",
    "categories": "Boston Haskell · Data Structures · Haskell · Type Hackery",
    "origin": "http://comonad.com/reader/2010/finger-trees/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/b2988583028eed37828f437e.html",
    "rawSource": "content/original/corpus/b2988583028eed37828f437e.html",
    "rawFormat": "html",
    "legacyId": "174",
    "retrieved": "2026-09-21",
    "sha256": "34c30f2533d1d86c1bbdd592a4fc95ad721b7711cea1efc5eb7662ad3254bc29",
    "archive": "source/articles/finger-trees.original.html.txt"
  },
  {
    "slug": "iteratees-take-2",
    "title": "Iteratees, Parsec, and Monoids, Oh My!",
    "date": "2009-09-15",
    "dateLabel": "15 September 2009",
    "path": "reader/2009/iteratees-take-2/",
    "categories": "Boston Haskell · Monoids · Parsing",
    "origin": "http://comonad.com/reader/2009/iteratees-take-2/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/27e103de8b5007a6899ee92e.html",
    "rawSource": "content/original/corpus/27e103de8b5007a6899ee92e.html",
    "rawFormat": "html",
    "retrieved": "2026-09-21",
    "sha256": "df8476efacaa9901112074c829fffce6de29c45c7dd24b4b54b434cf169a95b0",
    "archive": "source/articles/iteratees-take-2.original.html.txt"
  },
  {
    "slug": "remodeling-precision",
    "title": "Remodeling Precision",
    "date": "2009-09-15",
    "dateLabel": "15 September 2009",
    "path": "reader/2009/remodeling-precision/",
    "categories": "Mathematics",
    "origin": "http://comonad.com/reader/2009/remodeling-precision/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/1aa697682867e52d76ed46b3.html",
    "rawSource": "content/original/corpus/1aa697682867e52d76ed46b3.html",
    "rawFormat": "html",
    "legacyId": "151",
    "retrieved": "2026-09-21",
    "sha256": "8e8f55a15198eec50f74c2ddae66d0c62398e0700e29f86d514b1a5637429f74",
    "archive": "source/articles/remodeling-precision.original.html.txt"
  },
  {
    "slug": "curried-scheme",
    "title": "Curried Scheme",
    "date": "2009-08-29",
    "dateLabel": "29 August 2009",
    "path": "reader/2009/curried-scheme/",
    "categories": "Macros · Scheme",
    "origin": "http://comonad.com/reader/2009/curried-scheme/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/03ed1207e6c72679e5736b84.html",
    "rawSource": "content/original/corpus/03ed1207e6c72679e5736b84.html",
    "rawFormat": "html",
    "legacyId": "145",
    "retrieved": "2026-09-21",
    "sha256": "5e50c85b4d95781bf16f27050753b488ca8762224323d49853577dea4b0cffe1",
    "archive": "source/articles/curried-scheme.original.html.txt"
  },
  {
    "slug": "iteratees-parsec-and-monoid",
    "title": "Iteratees, Parsec and Monoids (Slides)",
    "date": "2009-08-20",
    "dateLabel": "20 August 2009",
    "path": "reader/2009/iteratees-parsec-and-monoid/",
    "categories": "Algorithms · Data Structures · Haskell · Mathematics · Monoids · Parsing",
    "origin": "http://comonad.com/reader/2009/iteratees-parsec-and-monoid/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/4c095f52672ab5c67e870d91.html",
    "rawSource": "content/original/corpus/4c095f52672ab5c67e870d91.html",
    "rawFormat": "html",
    "retrieved": "2026-09-21",
    "sha256": "1950d29a145b0429d874aacfbfc2cb5c80b6b6e5440b57282225317b2aa1c774",
    "archive": "source/articles/iteratees-parsec-and-monoid.original.html.txt"
  },
  {
    "slug": "clearer-reflection",
    "title": "Clearer Reflections",
    "date": "2009-08-15",
    "dateLabel": "15 August 2009",
    "path": "reader/2009/clearer-reflection/",
    "categories": "Haskell · Monads · Monoids · Type Hackery",
    "origin": "http://comonad.com/reader/2009/clearer-reflection/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/490afb656194a05f569254d6.html",
    "rawSource": "content/original/corpus/490afb656194a05f569254d6.html",
    "rawFormat": "html",
    "legacyId": "93",
    "retrieved": "2026-09-21",
    "sha256": "fdc2768c269af5516a6ebba1f7ae4a9dc66bf316e4bdf7f701e179894457e10d",
    "archive": "source/articles/clearer-reflection.original.html.txt"
  },
  {
    "slug": "hac-phi-slides",
    "title": "Slides from Hac Phi: “All About Monoids”",
    "date": "2009-07-31",
    "dateLabel": "31 July 2009",
    "path": "reader/2009/hac-phi-slides/",
    "categories": "Haskell · Mathematics · Monoids · Parsing",
    "origin": "http://comonad.com/reader/2009/hac-phi-slides/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/d6322f251523a2f0eb5021a4.html",
    "rawSource": "content/original/corpus/d6322f251523a2f0eb5021a4.html",
    "rawFormat": "html",
    "retrieved": "2026-09-21",
    "sha256": "cc6fc5224a62268be139ebe66680ace5b6d084fa664a0a83e65333ff388e5141",
    "archive": "source/articles/hac-phi-slides.original.html.txt"
  },
  {
    "slug": "recursion-schemes",
    "title": "Recursion Schemes: A Field Guide (Redux)",
    "date": "2009-06-11",
    "dateLabel": "11 June 2009",
    "path": "reader/2009/recursion-schemes/",
    "categories": "Category Theory · Haskell · Mathematics",
    "origin": "http://comonad.com/reader/2009/recursion-schemes/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/a7b76a06be80cd0de14a3b09.html",
    "rawSource": "content/original/corpus/a7b76a06be80cd0de14a3b09.html",
    "rawFormat": "html",
    "retrieved": "2026-09-21",
    "sha256": "8ef9f708a824dbe2f2237c484c789a0382b3ff0ced476e18c9501427bc940d22",
    "archive": "source/articles/recursion-schemes.original.html.txt"
  },
  {
    "slug": "incremental-folds",
    "title": "Reflecting On Incremental Folds",
    "date": "2009-03-31",
    "dateLabel": "31 March 2009",
    "path": "reader/2009/incremental-folds/",
    "categories": "Category Theory · Haskell · Squiggol",
    "origin": "http://comonad.com/reader/2009/incremental-folds/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/b73ecf77eff11ef5936c0834.html",
    "rawSource": "content/original/corpus/b73ecf77eff11ef5936c0834.html",
    "rawFormat": "html",
    "legacyId": "83",
    "retrieved": "2026-09-21",
    "sha256": "e73a9b2dd8798959af80314feaf704a4e0c1a907bd1eff7b036244bc618a6ce9",
    "archive": "source/articles/incremental-folds.original.html.txt"
  },
  {
    "slug": "the-pointed-set-comonad",
    "title": "The Pointed-Set Comonad",
    "date": "2008-12-04",
    "dateLabel": "4 December 2008",
    "path": "reader/2008/the-pointed-set-comonad/",
    "categories": "Comonads · Haskell · Uncategorized",
    "origin": "http://comonad.com/reader/2008/the-pointed-set-comonad/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/137b1682ac6f78d125dd8666.html",
    "rawSource": "content/original/corpus/137b1682ac6f78d125dd8666.html",
    "rawFormat": "html",
    "legacyId": "80",
    "retrieved": "2026-09-21",
    "sha256": "1b10d5acec590a3747a8c17d6798ed496b3379dd593465a07fa6f25435e54686",
    "archive": "source/articles/the-pointed-set-comonad.original.html.txt"
  },
  {
    "slug": "still-alive",
    "title": "Still Alive",
    "date": "2008-11-08",
    "dateLabel": "8 November 2008",
    "path": "reader/2008/still-alive/",
    "categories": "Uncategorized",
    "origin": "http://comonad.com/reader/2008/still-alive/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/96f37f4d5e796ddc9a3a12db.html",
    "rawSource": "content/original/corpus/96f37f4d5e796ddc9a3a12db.html",
    "rawFormat": "html",
    "retrieved": "2026-09-21",
    "sha256": "54685ce1e77682639ffc6bf7339cf2daf8c3c0f3c83cac18cefd2185e2b441b2",
    "archive": "source/articles/still-alive.original.html.txt"
  },
  {
    "slug": "representing-adjunctions",
    "title": "Representing Adjunctions",
    "date": "2008-06-05",
    "dateLabel": "5 June 2008",
    "path": "reader/2008/representing-adjunctions/",
    "categories": "Category Theory · Haskell",
    "origin": "http://comonad.com/reader/2008/representing-adjunctions/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/f418e81159c3179c2eef0fa1.html",
    "rawSource": "content/original/corpus/f418e81159c3179c2eef0fa1.html",
    "rawFormat": "html",
    "legacyId": "67",
    "retrieved": "2026-09-21",
    "sha256": "1fa554954a11b9731651d6afa59fef6789be71586aa69bbe6c79f4b807634fbb",
    "archive": "source/articles/representing-adjunctions.original.html.txt"
  },
  {
    "slug": "zapping-strong-adjunctions",
    "title": "Zapping Adjunctions",
    "date": "2008-06-05",
    "dateLabel": "5 June 2008",
    "path": "reader/2008/zapping-strong-adjunctions/",
    "categories": "Category Theory · Haskell",
    "origin": "http://comonad.com/reader/2008/zapping-strong-adjunctions/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/cfe48e3fadcef955610d96d1.html",
    "rawSource": "content/original/corpus/cfe48e3fadcef955610d96d1.html",
    "rawFormat": "html",
    "legacyId": "68",
    "retrieved": "2026-09-21",
    "sha256": "69acd5d9a41496f7b1bfb5548f432af613785bce2082d261fc93218e6c1177fc",
    "archive": "source/articles/zapping-strong-adjunctions.original.html.txt"
  },
  {
    "slug": "linear-bloom-filters",
    "title": "Linear Bloom Filters",
    "date": "2008-06-03",
    "dateLabel": "3 June 2008",
    "path": "reader/2008/linear-bloom-filters/",
    "categories": "Algorithms · Data Structures",
    "origin": "http://comonad.com/reader/2008/linear-bloom-filters/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/53b48f9c131d363aba9daeb7.html",
    "rawSource": "content/original/corpus/53b48f9c131d363aba9daeb7.html",
    "rawFormat": "html",
    "legacyId": "66",
    "retrieved": "2026-09-21",
    "sha256": "57b60682916da60bd81f951fda14b2989408119cb44fb03c01534eaa06e7e309",
    "archive": "source/articles/linear-bloom-filters.original.html.txt"
  },
  {
    "slug": "kan-extension-iii",
    "title": "Kan Extensions III: As Ends and Coends",
    "date": "2008-05-26",
    "dateLabel": "26 May 2008",
    "path": "reader/2008/kan-extension-iii/",
    "categories": "Category Theory · Haskell · Kan Extensions · Mathematics",
    "origin": "http://comonad.com/reader/2008/kan-extension-iii/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/c7b7487534ab916058fe2750.html",
    "rawSource": "content/original/corpus/c7b7487534ab916058fe2750.html",
    "rawFormat": "html",
    "legacyId": "65",
    "series": "kan-extensions",
    "seriesOrder": 3,
    "retrieved": "2026-09-21",
    "sha256": "ae93aefbd388af2c8937d491c463ecef0008759ba94b709f431e906839aea882",
    "archive": "source/articles/kan-extension-iii.original.html.txt"
  },
  {
    "slug": "kan-extensions-ii",
    "title": "Kan Extensions II: Adjunctions, Composition, Lifting",
    "date": "2008-05-22",
    "dateLabel": "22 May 2008",
    "path": "reader/2008/kan-extensions-ii/",
    "categories": "Category theory · Haskell",
    "origin": "http://comonad.com/reader/2008/kan-extensions-ii/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/bf080b25f6fb7791cc3a8d0c.html",
    "rawSource": "content/original/corpus/bf080b25f6fb7791cc3a8d0c.html",
    "rawFormat": "html",
    "legacyId": "64",
    "series": "kan-extensions",
    "seriesOrder": 2,
    "retrieved": "2026-09-21",
    "sha256": "f564d7e122eb87b05619d7131829cb96046d98b08b5634929832076f09d64bae",
    "archive": "source/articles/kan-extensions-ii.original.html.txt"
  },
  {
    "slug": "kan-extensions",
    "title": "Kan Extensions",
    "date": "2008-05-20",
    "dateLabel": "20 May 2008",
    "path": "reader/2008/kan-extensions/",
    "categories": "Category theory · Haskell",
    "origin": "http://comonad.com/reader/2008/kan-extensions/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/86f9f50b192345a65ac39d16.html",
    "rawSource": "content/original/corpus/86f9f50b192345a65ac39d16.html",
    "rawFormat": "html",
    "legacyId": "63",
    "series": "kan-extensions",
    "seriesOrder": 1,
    "seriesTitle": "Kan Extensions I",
    "retrieved": "2026-09-21",
    "sha256": "8b82764c458bff86a94888a5df7d9bd7dce94302a74eb11202ca320bc874b6f2",
    "archive": "source/articles/kan-extensions.original.html.txt"
  },
  {
    "slug": "elgot-coalgebras",
    "title": "Elgot (Co)Algebras",
    "date": "2008-05-19",
    "dateLabel": "19 May 2008",
    "path": "reader/2008/elgot-coalgebras/",
    "categories": "Category Theory · Comonads · Haskell · Mathematics · Monads · Squiggol",
    "origin": "http://comonad.com/reader/2008/elgot-coalgebras/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/c5c04cb56bb7a617cf6ede4f.html",
    "rawSource": "content/original/corpus/c5c04cb56bb7a617cf6ede4f.html",
    "rawFormat": "html",
    "legacyId": "60",
    "retrieved": "2026-09-21",
    "sha256": "0cfa8c79cda7b3bf98e3a60dbc4e1dd08dbf5acb1df9c9d54a4a4b367644396c",
    "archive": "source/articles/elgot-coalgebras.original.html.txt"
  },
  {
    "slug": "forgetful-laziness",
    "title": "Forgetful Laziness",
    "date": "2008-05-16",
    "dateLabel": "16 May 2008",
    "path": "reader/2008/forgetful-laziness/",
    "categories": "Haskell · Uncategorized",
    "origin": "http://comonad.com/reader/2008/forgetful-laziness/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/dd0ae762090500c5ea4dc6f0.html",
    "rawSource": "content/original/corpus/dd0ae762090500c5ea4dc6f0.html",
    "rawFormat": "html",
    "legacyId": "59",
    "retrieved": "2026-09-21",
    "sha256": "89ba33dc7086d32b25ad814ca090af9b3e014f4cbda55cff0702063af31538b9",
    "archive": "source/articles/forgetful-laziness.original.html.txt"
  },
  {
    "slug": "generatingfunctorology",
    "title": "Generatingfunctorology",
    "date": "2008-05-14",
    "dateLabel": "14 May 2008",
    "path": "reader/2008/generatingfunctorology/",
    "categories": "Haskell · Mathematics · Type Theory",
    "origin": "http://comonad.com/reader/2008/generatingfunctorology/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/5fa81b552ea892ac8cde12e9.html",
    "rawSource": "content/original/corpus/5fa81b552ea892ac8cde12e9.html",
    "rawFormat": "html",
    "legacyId": "58",
    "series": "functor-power-series",
    "seriesOrder": 2,
    "retrieved": "2026-09-21",
    "sha256": "c30ac9132a1628cf8dcfaaab066aa0e13c2a587bb8361c2db02bc6ec5c7f17b8",
    "archive": "source/articles/generatingfunctorology.original.html.txt"
  },
  {
    "slug": "towards-formal-power-series-for-functors",
    "title": "Towards Formal Power Series for Functors",
    "date": "2008-05-13",
    "dateLabel": "13 May 2008",
    "path": "reader/2008/towards-formal-power-series-for-functors/",
    "categories": "Category Theory · Haskell · Mathematics · Type Theory",
    "origin": "http://comonad.com/reader/2008/towards-formal-power-series-for-functors/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/f08625f38af011ea1aa05c11.html",
    "rawSource": "content/original/corpus/f08625f38af011ea1aa05c11.html",
    "rawFormat": "html",
    "legacyId": "57",
    "series": "functor-power-series",
    "seriesOrder": 1,
    "retrieved": "2026-09-21",
    "sha256": "25638fbe555dbda14185115ec8b9353be5925d04ea28d9cb3189b0e53b323164",
    "archive": "source/articles/towards-formal-power-series-for-functors.original.html.txt"
  },
  {
    "slug": "just-fokkinga-abide",
    "title": "Just Fokkinga Abide",
    "date": "2008-05-07",
    "dateLabel": "7 May 2008",
    "path": "reader/2008/just-fokkinga-abide/",
    "categories": "Category Theory · Haskell · Squiggol",
    "origin": "http://comonad.com/reader/2008/just-fokkinga-abide/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/f4bcba68ea39007fed984742.html",
    "rawSource": "content/original/corpus/f4bcba68ea39007fed984742.html",
    "rawFormat": "html",
    "retrieved": "2026-09-21",
    "sha256": "c18089d7241efdc4346700a21b37554b142daf9d7fec03d2d3a91b7c4cff1726",
    "archive": "source/articles/just-fokkinga-abide.original.html.txt"
  },
  {
    "slug": "cozipping",
    "title": "Cozipping",
    "date": "2008-05-05",
    "dateLabel": "5 May 2008",
    "path": "reader/2008/cozipping/",
    "categories": "Category Theory · Haskell · Monads",
    "origin": "http://comonad.com/reader/2008/cozipping/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/4716f2528db8571a4e985ab5.html",
    "rawSource": "content/original/corpus/4716f2528db8571a4e985ab5.html",
    "rawFormat": "html",
    "legacyId": "55",
    "series": "zipping-and-cozipping",
    "seriesOrder": 2,
    "retrieved": "2026-09-21",
    "sha256": "fd004ca64657bef93726f26acfbde6119dc4a2708880d16b7c29655cd3661a17",
    "archive": "source/articles/cozipping.original.html.txt"
  },
  {
    "slug": "zipping-and-unzipping-functors",
    "title": "Zipping and Unzipping Functors",
    "date": "2008-05-04",
    "dateLabel": "4 May 2008",
    "path": "reader/2008/zipping-and-unzipping-functors/",
    "categories": "Comonads · Haskell",
    "origin": "http://comonad.com/reader/2008/zipping-and-unzipping-functors/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/965396383c90dac98623109a.html",
    "rawSource": "content/original/corpus/965396383c90dac98623109a.html",
    "rawFormat": "html",
    "legacyId": "54",
    "series": "zipping-and-cozipping",
    "seriesOrder": 1,
    "retrieved": "2026-09-21",
    "sha256": "04091740cc21be1e5ca0fe3c5c6b5ae063855d6ec9c37635115e88ca57361dff",
    "archive": "source/articles/zipping-and-unzipping-functors.original.html.txt"
  },
  {
    "slug": "deriving-strength-from-laziness",
    "title": "Deriving Strength from Laziness",
    "date": "2008-04-30",
    "dateLabel": "30 April 2008",
    "path": "reader/2008/deriving-strength-from-laziness/",
    "categories": "Category Theory · Comonads · Haskell · Monads",
    "origin": "http://comonad.com/reader/2008/deriving-strength-from-laziness/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/a35ed0bdac4cafcc5e27578a.html",
    "rawSource": "content/original/corpus/a35ed0bdac4cafcc5e27578a.html",
    "rawFormat": "html",
    "legacyId": "52",
    "retrieved": "2026-09-21",
    "sha256": "af697b42e0e4a23ee47bcad6fa839287ef0a7dd26d9f84d2affd3009f99f68f4",
    "archive": "source/articles/deriving-strength-from-laziness.original.html.txt"
  },
  {
    "slug": "the-cofree-comonad-and-the-expression-problem",
    "title": "The Cofree Comonad and the Expression Problem",
    "date": "2008-04-30",
    "dateLabel": "30 April 2008",
    "path": "reader/2008/the-cofree-comonad-and-the-expression-problem/",
    "categories": "Category Theory · Comonads · Haskell · Monads",
    "origin": "http://comonad.com/reader/2008/the-cofree-comonad-and-the-expression-problem/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/7b58f51cfd36c78a17cc545e.html",
    "rawSource": "content/original/corpus/7b58f51cfd36c78a17cc545e.html",
    "rawFormat": "html",
    "legacyId": "53",
    "retrieved": "2026-09-21",
    "sha256": "73b37f1d9a6528d0e6b5e4e83b988785a867cbcafb4877da2e4ceca5c21b8170",
    "archive": "source/articles/the-cofree-comonad-and-the-expression-problem.original.html.txt"
  },
  {
    "slug": "dynamorphisms-as-chronomorphisms",
    "title": "Dynamorphisms as Chronomorphisms",
    "date": "2008-04-26",
    "dateLabel": "26 April 2008",
    "path": "reader/2008/dynamorphisms-as-chronomorphisms/",
    "categories": "Category Theory · Comonads · Haskell",
    "origin": "http://comonad.com/reader/2008/dynamorphisms-as-chronomorphisms/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/b492c26975e3d814b46e952f.html",
    "rawSource": "content/original/corpus/b492c26975e3d814b46e952f.html",
    "rawFormat": "html",
    "legacyId": "51",
    "series": "chronomorphisms",
    "seriesOrder": 3,
    "retrieved": "2026-09-21",
    "sha256": "c688139d7589c8d782f0abd97f17891d17a522398a87fa73d383534ce9f00d7e",
    "archive": "source/articles/dynamorphisms-as-chronomorphisms.original.html.txt"
  },
  {
    "slug": "time-for-chronomorphisms",
    "title": "Time for Chronomorphisms",
    "date": "2008-04-26",
    "dateLabel": "26 April 2008",
    "path": "reader/2008/time-for-chronomorphisms/",
    "categories": "Category Theory · Comonads · Haskell · Monads",
    "origin": "http://comonad.com/reader/2008/time-for-chronomorphisms/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/deda6ee42bcdbf0c547a1502.html",
    "rawSource": "content/original/corpus/deda6ee42bcdbf0c547a1502.html",
    "rawFormat": "html",
    "series": "chronomorphisms",
    "seriesOrder": 2,
    "retrieved": "2026-09-21",
    "sha256": "2aaaa7afd26232bfd49f7a3eb2834ba36490e2b0cfc21d4cebcc0ca7d15cdcef",
    "archive": "source/articles/time-for-chronomorphisms.original.html.txt"
  },
  {
    "slug": "unnatural-transformations",
    "title": "Unnatural Transformations",
    "date": "2008-04-26",
    "dateLabel": "26 April 2008",
    "path": "reader/2008/unnatural-transformations/",
    "categories": "Category Theory · Comonads · Haskell · Monads · Uncategorized",
    "origin": "http://comonad.com/reader/2008/unnatural-transformations/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/6ca7e7f8abfaf80147497207.html",
    "rawSource": "content/original/corpus/6ca7e7f8abfaf80147497207.html",
    "rawFormat": "html",
    "legacyId": "50",
    "retrieved": "2026-09-21",
    "sha256": "d01a0a52c4dde4b1be7910bd33093a72f0aa4c314843784b7fb8f4fd134ce534",
    "archive": "source/articles/unnatural-transformations.original.html.txt"
  },
  {
    "slug": "generalized-hylomorphisms",
    "title": "Generalized Hylomorphisms",
    "date": "2008-04-24",
    "dateLabel": "24 April 2008",
    "path": "reader/2008/generalized-hylomorphisms/",
    "categories": "Category Theory · Comonads · Haskell · Monads",
    "origin": "http://comonad.com/reader/2008/generalized-hylomorphisms/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/6c1ddf89aceb309ddc64f5d8.html",
    "rawSource": "content/original/corpus/6c1ddf89aceb309ddc64f5d8.html",
    "rawFormat": "html",
    "series": "chronomorphisms",
    "seriesOrder": 1,
    "retrieved": "2026-09-21",
    "sha256": "860f8756036c02bcca8ea6a36978d33fcbf38477d2d92c2bcb7da0ef8adc1d1c",
    "archive": "source/articles/generalized-hylomorphisms.original.html.txt"
  },
  {
    "slug": "monads-for-free",
    "title": "Monads for Free",
    "date": "2008-04-11",
    "dateLabel": "11 April 2008",
    "path": "reader/2008/monads-for-free/",
    "categories": "Haskell · Monads",
    "origin": "http://comonad.com/reader/2008/monads-for-free/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/e8bd604eb99fff874eaacff7.html",
    "rawSource": "content/original/corpus/e8bd604eb99fff874eaacff7.html",
    "rawFormat": "html",
    "legacyId": "46",
    "retrieved": "2026-09-21",
    "sha256": "e292c35b10821c80ae59307849ef7076618722bb2d4afa78edcde475d46bc93e",
    "archive": "source/articles/monads-for-free.original.html.txt"
  },
  {
    "slug": "higher-order-abstract-syntax-a-la-carte",
    "title": "Higher-Order Abstract Syntax à la Carte",
    "date": "2008-03-26",
    "dateLabel": "26 March 2008",
    "path": "reader/2008/higher-order-abstract-syntax-a-la-carte/",
    "categories": "Category Theory · Haskell",
    "origin": "http://comonad.com/reader/2008/higher-order-abstract-syntax-a-la-carte/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/a830b45639c66016c4e4d4b2.html",
    "rawSource": "content/original/corpus/a830b45639c66016c4e4d4b2.html",
    "rawFormat": "html",
    "legacyId": "45",
    "retrieved": "2026-09-21",
    "sha256": "499a36ba29ee34220aa0263c846ecce9356568ebe1b3425b4f9c6c034646d0c6",
    "archive": "source/articles/higher-order-abstract-syntax-a-la-carte.original.html.txt"
  },
  {
    "slug": "rotten-bananas",
    "title": "Rotten Bananas",
    "date": "2008-03-25",
    "dateLabel": "25 March 2008",
    "path": "reader/2008/rotten-bananas/",
    "categories": "Category Theory · Haskell",
    "origin": "http://comonad.com/reader/2008/rotten-bananas/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/03c447e596c1bc926a1189c2.html",
    "rawSource": "content/original/corpus/03c447e596c1bc926a1189c2.html",
    "rawFormat": "html",
    "legacyId": "44",
    "retrieved": "2026-09-21",
    "sha256": "70b645685d18a1a454e34c39f9a57b1fdf29a52cebdccf08ebff991dc3fbfa87",
    "archive": "source/articles/rotten-bananas.original.html.txt"
  },
  {
    "slug": "elgot-algebras",
    "title": "Elgot Algebras",
    "date": "2008-01-01",
    "dateLabel": "1 January 2008",
    "path": "reader/2008/elgot-algebras/",
    "categories": "Uncategorized",
    "origin": "http://comonad.com/reader/2008/elgot-algebras/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/46ee2c06fa01483a2fbdb2dc.html",
    "rawSource": "content/original/corpus/46ee2c06fa01483a2fbdb2dc.html",
    "rawFormat": "html",
    "retrieved": "2026-09-21",
    "sha256": "2f7ca911c0ece0fff02f1e1da600dcc8e45bd5e750f3834d0cb5128a4403a20d",
    "archive": "source/articles/elgot-algebras.original.html.txt"
  },
  {
    "slug": "parameterized-monads-in-haskell",
    "title": "Parameterized Monads in Haskell",
    "date": "2007-07-13",
    "dateLabel": "13 July 2007",
    "path": "reader/2007/parameterized-monads-in-haskell/",
    "categories": "Haskell · Monads · Type Theory",
    "origin": "http://comonad.com/reader/2007/parameterized-monads-in-haskell/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/1e413dde1ae13a386437362c.html",
    "rawSource": "content/original/corpus/1e413dde1ae13a386437362c.html",
    "rawFormat": "html",
    "legacyId": "41",
    "retrieved": "2026-09-21",
    "sha256": "67ce47c668490b4d0b55f092482d63f93993c07f8057ef98812fce977fb6b334",
    "archive": "source/articles/parameterized-monads-in-haskell.original.html.txt"
  },
  {
    "slug": "updated-datatype",
    "title": "Updated Data.Type.*",
    "date": "2007-07-13",
    "dateLabel": "13 July 2007",
    "path": "reader/2007/updated-datatype/",
    "categories": "Haskell · Type Hackery · Uncategorized",
    "origin": "http://comonad.com/reader/2007/updated-datatype/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/5e24e9ba19ef475b5a7a7086.html",
    "rawSource": "content/original/corpus/5e24e9ba19ef475b5a7a7086.html",
    "rawFormat": "html",
    "retrieved": "2026-09-21",
    "sha256": "3264d3badbe3d686236b63dcc18d7ad520868261b837a6cbf0edfe327c7f1067",
    "archive": "source/articles/updated-datatype.original.html.txt"
  },
  {
    "slug": "javascript-interpreter-recompiler-atomizer-threading-library",
    "title": "Javascript Interpreter, Recompiler, Atomizer, Threading Library…",
    "date": "2007-05-21",
    "dateLabel": "21 May 2007",
    "path": "reader/2007/javascript-interpreter-recompiler-atomizer-threading-library/",
    "categories": "Javascript",
    "origin": "http://comonad.com/reader/2007/javascript-interpreter-recompiler-atomizer-threading-library/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/a7766f536e60154ea77dc35b.html",
    "rawSource": "content/original/corpus/a7766f536e60154ea77dc35b.html",
    "rawFormat": "html",
    "retrieved": "2026-09-21",
    "sha256": "b5175783146310eff13058bc5d8e5f51b5df8c763587f96fb506619e7c39298d",
    "archive": "source/articles/javascript-interpreter-recompiler-atomizer-threading-library.original.html.txt"
  },
  {
    "slug": "logic",
    "title": "##logic",
    "date": "2006-11-09",
    "dateLabel": "9 November 2006",
    "path": "reader/2006/logic/",
    "categories": "Logic",
    "origin": "http://comonad.com/reader/2006/logic/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/df6462db066179159571c300.html",
    "rawSource": "content/original/corpus/df6462db066179159571c300.html",
    "rawFormat": "html",
    "retrieved": "2026-09-21",
    "sha256": "d0d63dd2f8675147ffd9b547f1456610722fb494941f208118286874dd5c39ae",
    "archive": "source/articles/logic.original.html.txt"
  },
  {
    "slug": "generalizing-dot",
    "title": "Generalizing (.)",
    "date": "2006-11-09",
    "dateLabel": "9 November 2006",
    "path": "reader/2006/generalizing-dot/",
    "categories": "Haskell · Monads",
    "origin": "http://comonad.com/reader/2006/generalizing-dot/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/3cb8234acc5a40f11c2b3817.html",
    "rawSource": "content/original/corpus/3cb8234acc5a40f11c2b3817.html",
    "rawFormat": "html",
    "legacyId": "35",
    "retrieved": "2026-09-21",
    "sha256": "9c782b22e221450ef2b0aa6b378e1d211e83ec81689d7b3493bcbb238ced03e1",
    "archive": "source/articles/generalizing-dot.original.html.txt"
  },
  {
    "slug": "overloaded-functions-with-subtyping",
    "title": "Overloaded Functions with Subtyping",
    "date": "2006-11-01",
    "dateLabel": "1 November 2006",
    "path": "reader/2006/overloaded-functions-with-subtyping/",
    "categories": "Type Theory",
    "origin": "http://comonad.com/reader/2006/overloaded-functions-with-subtyping/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/adc06eea64eed2fc50d87989.html",
    "rawSource": "content/original/corpus/adc06eea64eed2fc50d87989.html",
    "rawFormat": "html",
    "retrieved": "2026-09-21",
    "sha256": "99ec1db118fe7a4f6c95d692c537ee8fd0108814ed0988e9e3e4ed451be7bf3e",
    "archive": "source/articles/overloaded-functions-with-subtyping.original.html.txt"
  },
  {
    "slug": "wikipress",
    "title": "WikiPress",
    "date": "2006-10-26",
    "dateLabel": "26 October 2006",
    "path": "reader/2006/wikipress/",
    "categories": "Meta",
    "origin": "http://comonad.com/reader/2006/wikipress/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/6f0ece51791c017a25eb3917.html",
    "rawSource": "content/original/corpus/6f0ece51791c017a25eb3917.html",
    "rawFormat": "html",
    "retrieved": "2026-09-21",
    "sha256": "ec45903dce35fb38d458d9fbdd752483f12af91aca24736157da9a382cc26a4f",
    "archive": "source/articles/wikipress.original.html.txt"
  },
  {
    "slug": "hello-world",
    "title": "Hello, World!",
    "date": "2006-10-17",
    "dateLabel": "17 October 2006",
    "path": "reader/2006/hello-world/",
    "categories": "Meta",
    "origin": "http://comonad.com/reader/2006/hello-world/",
    "author": "Edward Kmett",
    "source": "Comonad.Reader",
    "rawHTML": "content/original/corpus/48d3b217a96e5bd9c482d5a8.html",
    "rawSource": "content/original/corpus/48d3b217a96e5bd9c482d5a8.html",
    "rawFormat": "html",
    "retrieved": "2026-09-21",
    "sha256": "0be93641613496eca6edea8c286632e7e410f6aeef7db3ae3293f500b9e0c9d9",
    "archive": "source/articles/hello-world.original.html.txt"
  },
  {
    "slug": "harmless-algorithms-4",
    "title": "Harmless Algorithms — Part 4: A Hybrid Approach to Visibility",
    "date": "2001-02-19",
    "dateLabel": "19 February 2001",
    "path": "reader/2001/harmless-algorithms-4/",
    "categories": "Graphics · Algorithms · C++",
    "origin": "https://flipcode.com/archives/Harmless_Algorithms-Issue_04_A_Hybrid_Approach_to_Visibility.shtml",
    "author": "Edward Kmett",
    "source": "Flipcode",
    "rawHTML": "content/original/external/kmett-2001-harmless-algorithms-04.html",
    "rawSource": "content/original/external/kmett-2001-harmless-algorithms-04.html",
    "rawFormat": "html",
    "dateBasis": "Publisher publication date. The original signed date is retained in the article.",
    "series": "harmless-algorithms",
    "seriesOrder": 4,
    "retrieved": "2026-09-22",
    "sha256": "72bcfb6e391d81ef46c40b648f53d20863eceee51540f056aae096e89c0d615c",
    "archive": "source/articles/harmless-algorithms-4.original.html.txt"
  },
  {
    "slug": "harmless-algorithms-3",
    "title": "Harmless Algorithms — Part 3: Design Patterns And 3D Gaming",
    "date": "2000-01-26",
    "dateLabel": "26 January 2000",
    "path": "reader/2000/harmless-algorithms-3/",
    "categories": "Graphics · Algorithms · C++",
    "origin": "https://flipcode.com/archives/Harmless_Algorithms-Issue_03_Design_Patterns_And_3D_Gaming.shtml",
    "author": "Edward Kmett",
    "source": "Flipcode",
    "rawHTML": "content/original/external/kmett-2000-harmless-algorithms-03.html",
    "rawSource": "content/original/external/kmett-2000-harmless-algorithms-03.html",
    "rawFormat": "html",
    "dateBasis": "Publisher publication date. The original signed date is retained in the article.",
    "series": "harmless-algorithms",
    "seriesOrder": 3,
    "retrieved": "2026-09-22",
    "sha256": "dd08090d031326f273c9cfed478e9e491ecc2fa64f5404b3e1b3e15a5eb2f943",
    "archive": "source/articles/harmless-algorithms-3.original.html.txt"
  },
  {
    "slug": "harmless-algorithms-2",
    "title": "Harmless Algorithms — Part 2: Scene Traversal Algorithms",
    "date": "1999-04-30",
    "dateLabel": "30 April 1999",
    "path": "reader/1999/harmless-algorithms-2/",
    "categories": "Graphics · Algorithms · C++",
    "origin": "https://flipcode.com/archives/Harmless_Algorithms-Issue_02_Scene_Traversal_Algorithms.shtml",
    "author": "Edward Kmett",
    "source": "Flipcode",
    "rawHTML": "content/original/external/kmett-1999-harmless-algorithms-02.html",
    "rawSource": "content/original/external/kmett-1999-harmless-algorithms-02.html",
    "rawFormat": "html",
    "dateBasis": "Publisher publication date. The original signed date is retained in the article.",
    "series": "harmless-algorithms",
    "seriesOrder": 2,
    "retrieved": "2026-09-22",
    "sha256": "ab6f463aa500bf7de6838c7f2a738351be7b948da7acf7281e9190391c6ad871",
    "archive": "source/articles/harmless-algorithms-2.original.html.txt"
  },
  {
    "slug": "harmless-algorithms-1",
    "title": "Harmless Algorithms — Part 1: Fine Occlusion Culling Algorithms",
    "date": "1999-04-09",
    "dateLabel": "9 April 1999",
    "path": "reader/1999/harmless-algorithms-1/",
    "categories": "Graphics · Algorithms · C++",
    "origin": "https://flipcode.com/archives/Harmless_Algorithms-Issue_01_Fine_Occlusion_Culling_Algorithms.shtml",
    "author": "Edward Kmett",
    "source": "Flipcode",
    "rawHTML": "content/original/external/kmett-1999-harmless-algorithms-01.html",
    "rawSource": "content/original/external/kmett-1999-harmless-algorithms-01.html",
    "rawFormat": "html",
    "dateBasis": "Publisher publication date. The original signed date is retained in the article.",
    "series": "harmless-algorithms",
    "seriesOrder": 1,
    "retrieved": "2026-09-22",
    "sha256": "16d5b24a2880a34eed91a037c2f498a08bfb75f0126fbeda7867a4bf0451c17c",
    "archive": "source/articles/harmless-algorithms-1.original.html.txt"
  },
  {
    "slug": "wavelets-in-3d-graphics",
    "title": "Wavelets in 3D Graphics",
    "date": "1995",
    "dateLabel": "Circa 1995",
    "datePrecision": "year",
    "dateApproximate": true,
    "path": "reader/1995/wavelets-in-3d-graphics/",
    "categories": "Graphics · Wavelets · Compression",
    "origin": "https://web.archive.org/web/20010526225638/http://www.bloodshed.com:80/wavelets/haar.shtml",
    "author": "Edward Kmett",
    "source": "Bloodshed / Harmless Entertainment",
    "rawHTML": "content/original/external/bloodshed-haar.html",
    "rawSource": "content/original/external/bloodshed-haar.html",
    "rawFormat": "html",
    "dateBasis": "Circa 1995, recalled by Edward Kmett on 22 September 2026. The preserved 26 May 2001 snapshot contains references dated through 1997; its revision history is unknown. The archive capture is not a publication date.",
    "retrieved": "2026-09-22",
    "sha256": "1c4bf60ec31ef5d921e12f15fdcf5839b10e55491a1dc5cf9c344981206b161a",
    "archive": "source/articles/wavelets-in-3d-graphics.original.html.txt"
  }
]
