# I am the Watcher. I am your guide through this vast new twtiverse.
# 
# Usage:
#     https://watcher.sour.is/api/plain/users              View list of users and latest twt date.
#     https://watcher.sour.is/api/plain/twt                View all twts.
#     https://watcher.sour.is/api/plain/mentions?uri=:uri  View all mentions for uri.
#     https://watcher.sour.is/api/plain/conv/:hash         View all twts for a conversation subject.
# 
# Options:
#     uri     Filter to show a specific users twts.
#     offset  Start index for quey.
#     limit   Count of items to return (going back in time).
# 
# twt range = 1 7
# self = https://watcher.sour.is/conv/75vfpva
I wish that this experimental Capture Checking feature in scala 3 were available in the official distribution so that I could play with it in a project i'm working on now.
you can handle effects in the manner of algebraic effects using this feature, which I find way more palatable than living in monad hell.
this is a weird analogy I guess, but I find programming in a monadic style to be analogous to how you used to install software back in the days before reliable package managers. You'd be like "oh I want to do X so I need to install SpecialSoftware." So you'd download the source code for SpecialSoftware, try to compile it with make, and it'd explode. After reading the weird errors, you finally figure out that SpecialSoftware depends on libFoo. So you'd download the source code for libFoo, try to compile it, and it'd explode.
after hours of doing a depth-first search through the lib* tree and compiling as you go, eventually you'd start to succeed, but by that point you totally forgot about X and SpecialSoftware and you have made your computer into a mess of libraries you compiled. Isn't it nice that nowadays you can choose to trust a package maintainer to do that work on your behalf, and only take on the burden if you have a special reason to do so?*
anyhow, that's what programming with monads is like, to me. Oh, I want to do X. OK I'll try using SpecialEffectsLibrary. But to do that I have to wrap my code in FooMonad. OK. But then to use FooMonad with this other monad I like using, I need a FooMonadTransformer. OK. Oh but now that doesn't compile because I didn't wrap such-and-such in a call to FooMonad.pure. OK. Oh and since I'm using monads I can't do this other thing recursively. Hmm what now. By the time I sort out all the compiler errors I forgot about X.
and all of that to protect yourself from the possibility of leaking a resource? A little programming discipline can achieve the same!

Anyhow, I'm interested in algebraic effects because they look a little more natural to me. You can sorta kinda write code the way you want, and then supply "handlers" for the effects like I/O or database access or whatever. Which is a not-unreasonable way to structure things anyway. And the compiler barks at you with helpful errors like "you're not handling effect Foo" instead of "there is no implicit view from FooMonad to Option" that make little sense unless you've already stewed your brain in monads.
putting the MAD in MonAD lol