You can read Google's full explainer here. In short, as far I understand it, it's basically an attempt to have a third party (most likely your device's manufacturer but I guess it could be anything that can manage identities, e. g. Twitter or Github) to verify that you are definitely human and accessing the site with your human hands and human eyes. Or something. They're kind of vague about what information they want attesters to supply.



prophet
@prophet

Be very explicit about the difference between type variables, unification variables and skolems

Type variables are always bound by foralls and represent variables that can be instantiated to any possible concrete type. For example, forall a. a -> a can be instantiated to Int -> Int, String -> String or Bool -> Bool

Unification variables are placeholders that stand for as of yet unknown concrete types. These usually originate from usages of polymorphic types (where type variables are instantiated with fresh(!!!) unification variables at every use site, since every use site instantiates the type variable to a possibly different concrete type, but which one that is might not be known yet), but they are more generally useful in places where a type is needed that might not be fully known yet (e.g. unannotated lambda parameters or recursive let bindings)

Skolems on the other hand are type constants that are only equal to themselves. These are needed when checking against polymorphic types. The idea is that a function with type forall a. a -> a cannot make any assumptions about the type of its parameter, which is ensured by checking it against the type #a -> #a (where #a is a fresh skolem).

These three are often confused since they could all reasonably be called "type variables", but doing so will only bring you pain. They are distinct concepts and should really be treated as such.

Unfortunately GHC is not great at this. In error messages, unification variables are usually displayed with a trailing number (a0), although something like a1 can either be a unification variable or a skolem if just a would be ambiguous. The only way to tell which one it is is by looking for 'a1' is a rigid type variable bound by... (you know, in the section of the error that noone actually reads because it's massive and almost never useful)



jaidamack
@jaidamack

I think I've made the comparison once before already, but Cohost really is starting to feel more and more like a friendly local pub as successive waves of users come on in.

There's the film critics and the labour organisers and the technically inclined - both physical and digitally so - alongside the furries and the terminally horny artists and the fantasy enthusiasts and wargamers and history buffs and CSS criminals. But the Venn diagram of each group doesn't feel like a hard circle as much as the squiggling knots of headphone shibari you pull out of your pocket. People are perfectly happy to mix and mingle and chat and share with one another, and there doesn't feel like there's been any particular shame or trepidation of, "Ooh, I can't share that from a furry account," or, "I hope this person won't mind me sharing from an obviously horny alt." Maaan, whatever. Everybody's just In On It and it's so surprisingly chill.

As well, I haven't seen yet a single rechost with added commentary that felt snide or dismissive, or that classic of the quote tweet, "I've chosen to deliberately misunderstand what you've tweeted and be as virulently contrary as possible." So far it's all had that sense of people just chatting naturally, and the occasional, "Oh, hey, that reminds me of-" or the related, "You know, you're on to something. I think it'd worth remembering-" and on it goes.

It's nice. I dig it.