
I'm curious... Ultimately, ($) is just a name for what is otherwise unnameable: the whitespace which means application. However, application whitespace is a bit funny since it works uniformly for mono-/polymorphic arguments, un/boxed arguments, functions/record fields, etc— which is why we keep running into issues with typing ($). So my curiosity is this: why do we insist on considering ($) to be a function in the language rather than being syntax? We have overt syntax for other forms of whitespace, namely to deal with blocks and indentation, and we don't worry about what their types are, so why not treat ($) similarly? Sure, there are higher-order uses of ($), as when people write things like fmap($x), but afaict none of our typing hacks are worried about continuing to work in those settings, so there's no particular reason to think that those uses of a higher-order function capturing function application should be considered identical to the ($) used with runST, Int#, etc. -- Live well, ~wren