functional-mouse

A more functional mouse

If I were to watch myself using a computer mouse for an hour and transcribe my actions into pseudocode (which I should actually do), it would look like focusWindow(Slack); focusChannel(channel.name); focusWindow(Chrome); goTo(url);. Very imperative code, low abstraction. Low leverage. Just a huge list of functions that sometimes take a parameter. Moreover, you cannot, in general, do anything with the result of your action, or manipulate your action itself as an object, or recurse. You don’t know what’s going to happen until you irreversibly click. You can’t edit your moves for precision. You can’t do for each of a set. You can’t build up little pieces into reusable structures that make it easier to think on a higher level the next time. If I knew Haskell or whatever maybe I’d be able to say something like “a mouse should be a monad!” lol. I so wish I could talk about this formally. But for ten years I’ve been thinking that a good test case would just be: I should be able to select my mouse cursor. If I can figure that out then it at least forces me to confront some crucial questions.

I think I first thought about this in like 2017 in the Kensho 1WTC kitchen after I heard someone talking about “differentiable programs” and didn’t understand what it meant but thought about, well, mouse input is smooth, but the actions we take with it aren’t, how could you smooth all that out and put it some good composable microfoundations…

Experiments:

  1. Drawing — scratches my longstanding itch for an interface (any interface) that lets you select a mouse cursor

To do:

Longer term:

Little touches:

Links:

Questions:

Tests (use cases):