When to use tuples?

Yeah, I would never dispatch on a tuple type outside of my own module. What I meant was that I’d rather have an interface like:

MyLib.do_the_thing(a, b, c)

rather than…

instance = MyLib.MyStruct(a, b)
MyLib.do_the_thing(instance, c)

Allowing users to create structs is fine if they need more control, but object setup and teardown is like Java busywork. My preference is to deal with the library I’m using as little as possible. If there’s one or two functions that cover the majority of usecases for my module, all you should have to do is stick some built-in types in those functions and get the output you want.

This is what I meant to say about using tuples for API stuff; Not that users should never have to use my structs directly—just that simple things should be simple. I’m sure you didn’t mean to suggest anything to the contrary, of course.