William Yao's Haskell Musingshttps://www.williamyaoh.com/feed.atomWilliam Yaowilliamyaoh@gmail.com2023-07-01T00:00:00ZWhy Monad Transformers Matterhttps://www.williamyaoh.com/posts/2023-07-01-why-monad-transformers-matter.html2023-07-01T00:00:00Z2023-07-01T00:00:00ZMonad Transformers 101https://www.williamyaoh.com/posts/2023-06-10-monad-transformers-101.html2023-06-10T00:00:00Z2023-06-10T00:00:00ZDrawing Trees Functionally: Reingold and Tilford, 1981https://www.williamyaoh.com/posts/2023-04-22-drawing-trees-functionally.html2023-04-22T00:00:00Z2023-04-22T00:00:00ZWriting Servant combinators for fun and profithttps://www.williamyaoh.com/posts/2023-02-28-writing-servant-combinators.html2023-02-28T00:00:00Z2023-02-28T00:00:00ZWhy continuation-passing style works, and the Cont monadhttps://www.williamyaoh.com/posts/2022-05-02-the-cont-monad.html2022-05-02T00:00:00Z2022-05-02T00:00:00ZGetting better type errors by typing literally everythinghttps://www.williamyaoh.com/posts/2020-08-09-type-literally-everything.html2020-08-09T00:00:00Z2020-08-09T00:00:00ZDeriving the Writer monad from first principleshttps://www.williamyaoh.com/posts/2020-07-26-deriving-writer-monad.html2020-07-26T00:00:00Z2020-07-26T00:00:00ZDeriving the Reader monad from first principleshttps://www.williamyaoh.com/posts/2020-07-19-deriving-reader-monad.html2020-07-19T00:00:00Z2020-07-19T00:00:00ZDeriving the State monad from first principleshttps://www.williamyaoh.com/posts/2020-07-12-deriving-state-monad.html2020-07-12T00:00:00Z2020-07-12T00:00:00ZReanimate: a tutorial on making programmatic animationshttps://www.williamyaoh.com/posts/2020-05-31-reanimate-nqueens-tutorial.html2020-05-31T00:00:00Z2020-05-31T00:00:00ZReanimate: swearing at bad documentationhttps://www.williamyaoh.com/posts/2020-05-10-reanimate-an-experience-report.html2020-05-10T00:00:00Z2020-05-10T00:00:00ZPermissive, then restrictive: concrete solutions and exampleshttps://www.williamyaoh.com/posts/2020-05-03-permissiveness-solutions.html2020-05-03T00:00:00Z2020-05-03T00:00:00ZPermissive, then restrictive: learning how to design Haskell programshttps://www.williamyaoh.com/posts/2020-04-19-permissive-vs-restrictive.html2020-04-19T00:00:00Z2020-04-19T00:00:00ZThings software engineers trip up on when learning Haskellhttps://www.williamyaoh.com/posts/2020-04-12-software-engineer-hangups.html2020-04-12T00:00:00Z2020-04-12T00:00:00ZThe road to proficient Haskellhttps://www.williamyaoh.com/posts/2020-01-11-road-to-proficient.html2020-01-11T00:00:00Z2020-01-11T00:00:00ZTry the advanced stuffhttps://www.williamyaoh.com/posts/2020-01-05-try-the-advanced-stuff.html2020-01-05T00:00:00Z2020-01-05T00:00:00ZAbstracting out common columns in Opaleyehttps://www.williamyaoh.com/posts/2019-12-28-abstracting-out-common-columns-opaleye.html2019-12-28T00:00:00Z2019-12-28T00:00:00ZWhich type-safe database library should you use?https://www.williamyaoh.com/posts/2019-12-14-typesafe-db-libraries.html2019-12-14T00:00:00Z2019-12-14T00:00:00ZHow does Haskell make your life easier?https://www.williamyaoh.com/posts/2019-11-30-how-does-haskell-make-life-easier.html2019-11-30T00:00:00Z2019-11-30T00:00:00ZA list of Haskell articles on good design, good testinghttps://www.williamyaoh.com/posts/2019-11-24-design-and-testing-articles.html2019-11-24T00:00:00Z2019-11-24T00:00:00ZA dead-simple web stack in Haskellhttps://www.williamyaoh.com/posts/2019-11-16-a-dead-simple-web-stack.html2019-11-16T00:00:00Z2019-11-16T00:00:00ZA cheatsheet to JSON handling with Aesonhttps://www.williamyaoh.com/posts/2019-10-19-a-cheatsheet-to-json-handling.html2019-10-19T00:00:00Z2019-10-19T00:00:00ZHow to do basic error handling and logging in Haskellhttps://www.williamyaoh.com/posts/2019-10-12-how-to-basic-error-handling-logging.html2019-10-12T00:00:00Z2019-10-12T00:00:00ZYou are already smart enough to write Haskellhttps://www.williamyaoh.com/posts/2019-10-05-you-are-already-smart-enough.html2019-10-05T00:00:00Z2019-10-05T00:00:00ZFiguring out how to use Beam for DB migrationshttps://www.williamyaoh.com/posts/2019-09-27-figuring-out-beam-migrations.html2019-09-27T00:00:00Z2019-09-27T00:00:00ZA cheatsheet to the time libraryhttps://www.williamyaoh.com/posts/2019-09-16-time-cheatsheet.html2019-09-16T00:00:00Z2019-09-16T00:00:00ZHow I read Haskell documentationhttps://www.williamyaoh.com/posts/2019-06-06-how-i-read-haskell-documentation.html2019-06-06T00:00:00Z2019-06-06T00:00:00ZString interpolation and overlapping instances 101https://www.williamyaoh.com/posts/2019-05-27-string-interpolation-and-overlapping-instances.html2019-05-27T00:00:00Z2019-05-27T00:00:00ZExercises for understanding lenseshttps://www.williamyaoh.com/posts/2019-04-25-lens-exercises.html2019-04-25T00:00:00Z2019-04-25T00:00:00ZA cheatsheet to regexes in Haskellhttps://www.williamyaoh.com/posts/2019-04-11-cheatsheet-to-regexes-in-haskell.html2019-04-11T00:00:00Z2019-04-11T00:00:00ZDeploying Haskell applications with ECS, Docker, and Nixhttps://www.williamyaoh.com/posts/2019-04-09-deploying-haskell-with-ecs-and-nix.html2019-04-09T00:00:00Z2019-04-09T00:00:00ZHosting a static site using Hakyll and AWShttps://www.williamyaoh.com/posts/2019-01-21-static-site-hakyll-aws.html2019-01-21T00:00:00Z2019-01-21T00:00:00Z