41554 blogs · [ { "id": "01a087b1-3255-702e-ac42-2192d88fdd2d", "title": "Parametricity, or Comptime is Bonkers", "url": "https://noelwelsh.com/posts/comptime-is-bonkers/", "published_at": "2026-03-04T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192d969b89f", "title": "A Quick Introduction to OxCaml", "url": "https://noelwelsh.com/posts/a-quick-introduction-to-oxcaml/", "published_at": "2026-02-03T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192d9a41dce", "title": "Designing Custom UUIDs", "url": "https://noelwelsh.com/posts/building-an-id-scheme/", "published_at": "2025-11-25T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192da44c6c7", "title": "ScalaBridge Season Seven", "url": "https://noelwelsh.com/posts/scalabridge-season-seven/", "published_at": "2025-08-05T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192dad62d32", "title": "Operational and Denotational Strategies for Understanding Code", "url": "https://noelwelsh.com/posts/operational-denotational-understanding/", "published_at": "2025-02-03T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192db8a5f62", "title": "Designing a DSL for Terminal Interaction", "url": "https://noelwelsh.com/posts/codata-interpreter-terminal/", "published_at": "2025-01-17T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192dba91eb2", "title": "Direct-style Effects Explained", "url": "https://noelwelsh.com/posts/direct-style/", "published_at": "2024-04-24T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192dca678c0", "title": "Understanding Virtual Machine Dispatch through Duality", "url": "https://noelwelsh.com/posts/understanding-vm-dispatch/", "published_at": "2023-12-19T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192dce50584", "title": "ScalaBridge in 2023", "url": "https://noelwelsh.com/posts/scalabridge-in-2023/", "published_at": "2023-06-07T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192dd9d9eed", "title": "Scala with Cats, Creative Scala, and Scala 3", "url": "https://noelwelsh.com/posts/books-update/", "published_at": "2023-05-17T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192de5f4ac1", "title": "Functional Programming is Based", "url": "https://noelwelsh.com/posts/fp-is-based/", "published_at": "2023-03-06T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192df5e4500", "title": "A Case Study in Incrementally Improving Code", "url": "https://noelwelsh.com/posts/a-case-study-in-incrementally-improving-code/", "published_at": "2021-10-09T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192e0121f35", "title": "Enough: A Review", "url": "https://noelwelsh.com/posts/enough/", "published_at": "2021-03-14T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192e0e58ce9", "title": "Techniques for Understanding Code", "url": "https://noelwelsh.com/posts/techniques-for-understanding-code/", "published_at": "2020-07-29T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192e1679626", "title": "Scoring Ten-Pin Bowling with Algebraic Data and Finite State Machines", "url": "https://noelwelsh.com/posts/bowling-in-fp/", "published_at": "2020-07-18T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192e23353f8", "title": "What Functional Programming Is, What it Isn't, and Why it Matters", "url": "https://noelwelsh.com/posts/what-and-why-fp/", "published_at": "2020-07-05T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192e27b0384", "title": "Scala with Cats 2", "url": "https://noelwelsh.com/posts/scala-with-cats-2/", "published_at": "2020-03-16T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192e2b89678", "title": "A Quick Sketch of Research on Pedagogy and Curriculum for Teaching Programming", "url": "https://noelwelsh.com/posts/sketch-curriculum-pedagogy/", "published_at": "2020-03-12T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192e3017b02", "title": "Benchmarking Web Services using GraalVM Native Image", "url": "https://noelwelsh.com/posts/benchmarking-graal-native-image/", "published_at": "2020-02-13T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192e3131b80", "title": "Building Serverless Scala Services with GraalVM Native Image", "url": "https://noelwelsh.com/posts/serverless-scala-services/", "published_at": "2020-02-06T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192e3a92ed7", "title": "Recapping ScalaBridge Season Two", "url": "https://noelwelsh.com/posts/scalabridge-season-two/", "published_at": "2019-11-05T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192e4408737", "title": "Measuring ScalaBridge", "url": "https://noelwelsh.com/posts/measuring-scalabridge/", "published_at": "2019-08-27T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192e488de36", "title": "The Future of ScalaBridge", "url": "https://noelwelsh.com/posts/scalabridge-future/", "published_at": "2019-07-31T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192e533fcee", "title": "ScalaBridge London Season One", "url": "https://noelwelsh.com/posts/scalabridge-season-one/", "published_at": "2019-07-22T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192e5dff7e5", "title": "Gatsby is a Virus; Here's the Cure", "url": "https://noelwelsh.com/posts/gatsby-is-a-virus/", "published_at": "2019-07-11T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192e69f9df0", "title": "Type Classes vs Records of Functions", "url": "https://noelwelsh.com/posts/type-classes-vs-record-of-functions/", "published_at": "2019-06-24T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192e73071d8", "title": "Tips for Teaching Scala", "url": "https://noelwelsh.com/posts/tips-for-teaching-scala/", "published_at": "2019-06-20T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192e7a1514a", "title": "How to Write an Abstract", "url": "https://noelwelsh.com/posts/how-to-write-an-abstract/", "published_at": "2019-01-19T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192e87f8c1b", "title": "Doom Emacs Workflows", "url": "https://noelwelsh.com/posts/doom-emacs/", "published_at": "2019-01-10T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192e904c10b", "title": "New Site", "url": "https://noelwelsh.com/posts/new-site/", "published_at": "2018-10-30T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192e9344de4", "title": "Uniting Church and State: FP and OO Together", "url": "https://noelwelsh.com/posts/uniting-church-and-state/", "published_at": "2017-06-02T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192ea0d2c75", "title": "Opaque and Transparent Interpreters", "url": "https://noelwelsh.com/posts/opaque-transparent-interpreters/", "published_at": "2016-06-27T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192ea0f900a", "title": "Probabilistic Programming in Scala", "url": "https://noelwelsh.com/posts/probabilistic-programming/", "published_at": "2016-04-21T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192eace53a3", "title": "Slides and Code from the Interpreters Workshop at Scala Exchange 2015", "url": "https://noelwelsh.com/posts/scalax-interpreters-workshop/", "published_at": "2015-12-21T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192eb83a780", "title": "Why 3×5 is and isn't 5×3", "url": "https://noelwelsh.com/posts/why-3x5-is-and-isnt-5x3/", "published_at": "2015-11-17T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192ec2f4487", "title": "Late Binding and Overloading in Scala", "url": "https://noelwelsh.com/posts/late-binding-and-overloading/", "published_at": "2015-11-04T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192ecb0d20f", "title": "Reification, Kleislis, and Stream Libraries", "url": "https://noelwelsh.com/posts/reification/", "published_at": "2015-10-14T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192ed9d0428", "title": "Simple Isn't Easy", "url": "https://noelwelsh.com/posts/simple-isnt-easy/", "published_at": "2015-07-21T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192ee21006b", "title": "Annihilators in Scala", "url": "https://noelwelsh.com/posts/annihilators-in-scala/", "published_at": "2015-07-02T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192ee455d80", "title": "Keeping Scala Simple", "url": "https://noelwelsh.com/posts/keeping-scala-simple/", "published_at": "2015-06-25T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192eeeb7dfc", "title": "An Introduction to Cats", "url": "https://noelwelsh.com/posts/an-introduction-to-cats/", "published_at": "2015-06-10T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192ef5ecb20", "title": "More on Sealed Traits in Scala", "url": "https://noelwelsh.com/posts/more-on-sealed/", "published_at": "2015-06-04T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192f03d7593", "title": "Everything You Ever Wanted to Know About Sealed Traits in Scala", "url": "https://noelwelsh.com/posts/everything-about-sealed/", "published_at": "2015-06-02T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192f130c63d", "title": "Strata + Hadoop World London 2015 In Review", "url": "https://noelwelsh.com/posts/strata-hadoop-world/", "published_at": "2015-05-14T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192f1fe2ea6", "title": "Monadic IO: Laziness Makes You Free", "url": "https://noelwelsh.com/posts/monadic-io-laziness-makes-you-free/", "published_at": "2015-04-28T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192f224d53d", "title": "Deriving the Free Monad", "url": "https://noelwelsh.com/posts/deriving-the-free-monad/", "published_at": "2015-04-23T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192f23662d1", "title": "Free Monads Are Simple", "url": "https://noelwelsh.com/posts/free-monads-are-simple/", "published_at": "2015-04-13T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192f302c91f", "title": "Learn Shapeless, Find $500", "url": "https://noelwelsh.com/posts/learn-shapeless-find-500-dollars/", "published_at": "2014-10-02T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192f3372a82", "title": "AngularJS vs React", "url": "https://noelwelsh.com/posts/angularjs-vs-react/", "published_at": "2014-08-17T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192f3a81b04", "title": "Code Reviews Don't Produce Quality Code", "url": "https://noelwelsh.com/posts/code-reviews-dont-produce-quality-code/", "published_at": "2014-08-05T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192f3b1c88a", "title": "Scala Days 2014: The Low-down", "url": "https://noelwelsh.com/posts/scala-days-2014-the-lowdown/", "published_at": "2014-06-24T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192f48e6101", "title": "Teaching Scala", "url": "https://noelwelsh.com/posts/teaching-scala/", "published_at": "2014-03-10T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192f5491819", "title": "Choosing Goals for A/B Testing", "url": "https://noelwelsh.com/posts/choosing-goals-for-ab-testing/", "published_at": "2014-01-31T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192f609de61", "title": "Unboxed Tagged Angst", "url": "https://noelwelsh.com/posts/unboxed-tagged-angst/", "published_at": "2014-01-29T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192f66cc76a", "title": "The Computer: From Servant to Assistant", "url": "https://noelwelsh.com/posts/the-computer-from-servant-to-assistant/", "published_at": "2013-12-30T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192f685c571", "title": "CRDTs for fun and eventual profit", "url": "https://noelwelsh.com/posts/crdts-for-fun-and-eventual-profit/", "published_at": "2013-12-20T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192f69be133", "title": "Scalaz Monad Transformers", "url": "https://noelwelsh.com/posts/scalaz-monad-transformers/", "published_at": "2013-12-20T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192f6c6bf74", "title": "Machine Learning Meetup Talk on Bandits", "url": "https://noelwelsh.com/posts/machine-learning-meetup-talk/", "published_at": "2013-09-11T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192f7434e1b", "title": "The Free Bandit Course — Draft Outline", "url": "https://noelwelsh.com/posts/free-bandit-course-draft-outline/", "published_at": "2013-08-16T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192f7902fdb", "title": "Why You Should Know About Bandit Algorithms", "url": "https://noelwelsh.com/posts/why-you-should-know-about-bandit-algorithms/", "published_at": "2013-08-05T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192f7935ed4", "title": "Expressive Width in Programming Languages", "url": "https://noelwelsh.com/posts/expressive-width/", "published_at": "2013-07-10T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192f86db38e", "title": "Less Wat in Javascript's Future, Please", "url": "https://noelwelsh.com/posts/less-wat-in-javascripts-future-please/", "published_at": "2013-04-13T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192f877012f", "title": "Pre-register for the Streaming Algorithms Course", "url": "https://noelwelsh.com/posts/pre-register-for-the-streaming-algorithms-course/", "published_at": "2013-03-04T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192f8f60810", "title": "Why I Don't Like Akka Actors", "url": "https://noelwelsh.com/posts/why-i-dont-like-akka-actors/", "published_at": "2013-03-04T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192f991a6a9", "title": "Fitness for Busy People I", "url": "https://noelwelsh.com/posts/fitness-for-busy-people-part-1/", "published_at": "2013-01-06T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192f9d473d9", "title": "Is LinkedIn Heading for Disruption?", "url": "https://noelwelsh.com/posts/linkedin-heading-for-disruption/", "published_at": "2012-12-28T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192fa43fd8b", "title": "Streaming Algorithms, Scala eXchange Edition. Or, Stop Analysing and Start Acting", "url": "https://noelwelsh.com/posts/streaming-algorithms-scala-exchange-edition/", "published_at": "2012-11-22T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192fa996cb8", "title": "Hiccup!", "url": "https://noelwelsh.com/posts/hiccup/", "published_at": "2012-10-03T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192fb89688e", "title": "Streaming Algorithms, Strata Edition", "url": "https://noelwelsh.com/posts/strata-slides/", "published_at": "2012-10-01T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192fb9c5538", "title": "Streaming Algorithms, LSUG Edition", "url": "https://noelwelsh.com/posts/lsug-slides/", "published_at": "2012-09-14T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192fbce29a8", "title": "Sex, Lies, and (Server-side) Javascript", "url": "https://noelwelsh.com/posts/sex-lies-and-javascript/", "published_at": "2012-09-03T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192fcaccc1e", "title": "Making Big Data Small", "url": "https://noelwelsh.com/posts/lean-data/", "published_at": "2012-08-29T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192fcd05821", "title": "CUFP: One Great Reason to Attend", "url": "https://noelwelsh.com/posts/cufp/", "published_at": "2012-08-16T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192fd45425d", "title": "COLT and ICML", "url": "https://noelwelsh.com/posts/colt-and-icml/", "published_at": "2012-07-06T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192fdcf8ef3", "title": "Blogging Again", "url": "https://noelwelsh.com/posts/blogging-again/", "published_at": "2012-06-18T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192fe32cb0d", "title": "ML Class and Me", "url": "https://noelwelsh.com/posts/ml-class-and-me/", "published_at": "2011-10-29T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192ff31fb9a", "title": "KL UCB Part One", "url": "https://noelwelsh.com/posts/kl-ucb-part-one/", "published_at": "2011-09-03T00:00:00+00:00" }, { "id": "01a087b1-3255-702e-ac42-2192ffdb60bc", "title": "Blogging at the Speed of Text", "url": "https://noelwelsh.com/posts/blogging-at-the-speed-of-text/", "published_at": "2011-09-02T00:00:00+00:00" } ] posts Claim your blog
Back to noelwelsh.com
Blog · corpus.blog/blogs/noelwelsh.com/posts

noelwelsh.com

noelwelsh.com

2026

2025

2024

2023

2021

2020

2019

2018

2017

2016

2015

2014

2013

2012

2011