microsoft / cascadia-code

This is a fun, new monospaced font that includes programming ligatures and is designed to enhance the modern look and feel of the Windows Terminal.
Other
25.95k stars 807 forks source link

Handling of short combing arrow ligatures such as >>= should be reconsidered #435

Closed schuelermine closed 3 years ago

schuelermine commented 3 years ago

Environment

Cascadia Code version number: 2102.003
Application (with version) used to display text: konsole 20.08.2
Also occurs when using:
    Visual Studio Code 1.55.0-insider 84fe402d655e029eb1a5c04e675bf64788fa7fcf x64
    gedit - Version 3.38.0
OS platform and version: Pop!_OS 20.10
Screen resolution (i.e. 220dpi):
    1920px×1080px
    344mm×194mm (96x96dpi)

Steps to reproduce

Type >>=.

Expected behavior

A ligature appears, as with =<<.

Actual behavior

No ligature appears.

Screenshot

Screenshot from 2021-03-22 14-50-02

aaronbell commented 3 years ago

This is intentional.

=<< was implemented for the arbitrary-length arrows so you can write things like ==<<=== and so forth. However, in the case of >>= there is an operator in JavaScript that would be strange to replace with an arrow form. As a compromise, if you add another =, then it'll swap for the arrow ligature.

schuelermine commented 3 years ago

Sure, but Haskell uses this for the bind operator, and there, it's expected to be in ligature form, especially since =<< has the same meaning, but flipped.

aaronbell commented 3 years ago

Ah, well then perhaps I should disable =<< too then :)

mfocko commented 3 years ago

Ah, well then perhaps I should disable =<< too then :)

tbh if there are more suggestions for Haskell ligatures, you could turn it into stylistic set, right?

aaronbell commented 3 years ago

Certainly could.

aaronbell commented 3 years ago

I think for now I'll disable arrow forms for all of the associated operators (=>> <<= =<< and >>=), but might add special ligatures for them in the future to give a bit of a nicer appearance—or as @mfocko recommended, add a stylistic set for Haskell use. Thanks!

DHowett commented 3 years ago

Aw, I love the arrow forms.

aaronbell commented 3 years ago

you can still get to them via ==>> <<== ==<< and >>==! Honestly, I think it would be nice to have ligatures for these, I just don't like the inconsistency :/

schuelermine commented 3 years ago

you can still get to them via ==>> <<== ==<< and >>==! Honestly, I think it would be nice to have ligatures for these, I just don't like the inconsistency :/

I think that line of reasoning is misguided. The thing we like about the arrow forms is that they appear in our code, not that we can type them.

aaronbell commented 3 years ago

I don't disagree that it is nice to see them in Haskell. The problem is that they cause confusion / irritation in other scenarios and users of those scenarios might prefer to not have them look like arrows as they serve other purposes.

This is why I said that it would either make sense to create non-arrow ligature forms or provide a stylistic set for Haskell-only functionality. Either way, these operators should perform the same.

schuelermine commented 3 years ago

I agree. I just disagree with the idea that the fact that similar ligatures are still available diminishes the Haskell use case.

I really like the idea of a stylistic set for Haskell, I think that would be the best option. However, why not both? A JS-style ligature, and a Haskell-style ligature.

aaronbell commented 3 years ago

Oh, no I didn't mean to diminish the Haskell use case. More to indicate that the arrows are still available if one wants to make arrows. :)

Anyway, I'll mull over options.

schuelermine commented 3 years ago

Cool, I'm looking forward to any solutions!
I changed the title to reflect that the topic has widened.

ExE-Boss commented 3 years ago

I think it might be a good compromise to create a ligature for all of: >>=, =>>, <<= and =<<, that uses a narrower version of the >> and << ligatures as a base, with the = sign extending from it.


There currently isn’t any ligature for either of >>= and <<=, which is used as a bit‑shift and assign operator in C‑like languages (maybe also include the unsigned variant: >>>= and <<<=).

chtenb commented 3 years ago

These ligatures don't only apply for Haskell, but also for PureScript. In fact many functional languages using operators heavily are relevant for this.

2jacobtan commented 2 years ago

rip haskell users, since https://github.com/microsoft/cascadia-code/releases/tag/v2106.17

really liked the ligatures on >>= and =<<

(No discernible ligature, using the latest release https://github.com/microsoft/cascadia-code/releases/tag/v2111.01)