Need for support for pre-Windows 10 version 1511 re 'ANSI' codes

May I canvas views here on the following topic? Windows 10 version 1511 was issued in December 2015. The native terminal software on earlier versions of Windows did not support ‘ANSI’ control sequences (the codes that produce colour etc in terminal output). This is my question:

If future versions of a library on Hackage that you use stopped supporting users of Windows before Windows 10 version 1511 - by assuming ‘ANSI capability’ of the terminal - would you, or intended users of your software, be ‘put out’?

I am particularly interested in practical examples of where people would be inconvenienced.

What will be the effect of the change on remaining Win 7 users? It’s probably fine to downgrade to black-and-white, but garbled output would be quite unfortunate.

In part, I am seeking to understand whether there are people (globally) who are (a) compiling Haskell on Windows 7 or (b) using executables built with current libraries on Windows 7. Microsoft itself stopped mainstream support of Windows 7 in January 2020 and has said it will cease all support (even for a fee) from 14 January 2023.


I’m both (a) and (b) at the moment, and globally 12% of Windows users are on Win 7. Obviously, unpaid maintainers like you cannot be hold responsible for my choice to use a legacy technology, but it would be nice if ansi-terminal degraded gracefully to black-and-white on old machines. E. g., isANSITerminal can check getVersionEx and just return False for versions earlier than Win10 1511.


Unfortunately here you will get some kind of reliable answer for the former question but not for the latter, as we are mainly programmers here (or programmers/users, not just users). I wrote some terminal programs and games, I received feedback from people running them on Windows, I cannot say which specific Windows version.

I “MS will cease all support” implies “will cease security fixes too”, I think there is a strong point in dropping Win7 from that date. A possible solution that does not saddle maintainers is a good changelog entry plus adding a isLegacyWin :: IO Bool function so library users could decide to work around Win7 quirks if they so wish.

Thanks for the responses. Picking up on some matters raised here:

  • Microsoft’s announcement about the end of free Windows 7 support by Microsoft on 14 January 2020 explains ‘your PC no longer receives security updates’;

  • I understand that, unless the deadline is extended in the next three months, Edge and Chrome will drop support for Windows 7 on 15 January 2023;

  • I understand Cygwin 3.5, expected late 2022/early 2023, will drop Windows 7 and, consequently, so will MSYS2;

  • for my own part, I am willing to maintain, it is a lack of ability to test that is the issue. I no longer have access to any machine running legacy Windows. Not being able to test changes means that things can become ossified;

  • however, if people like @Bodigrim are still using Haskell on, and to support, Windows 7 machines, I’ll do my best;

  • for me, this is not so much about ansi-terminal (which emulates on legacy Windows, although the emulation is ossified) but libraries like haskeline which do not depend on ansi-terminal. The trade-off of catering only for the needs of people on legacy Windows is impairing the experience of people on modern (post-2015) Windows; and

  • the ansi-terminal package exports hSupportsANSIWithoutEmulation :: Handle IO (Maybe Bool), which does what its name suggests.

1 Like

FWIW I stopped using Win 7 recently (hooray!), so no longer has any personal interest in its support. Not sure if there are any other users in the Haskell community.

1 Like

With paid-for support by Microsoft, support by MSYS2, and browser support (Chrome/Microsoft Edge) for Windows 7 and 8 having ended on or before 15 January 2023, I am proposing to move to an ansi-terminal-1.0 that drops emulation for legacy Windows. See Time for an `ansi-terminal-1.0` that drops emulation for legacy Windows? · Issue #116 · UnkindPartition/ansi-terminal · GitHub. If anyone here thinks that is a bad idea, please can they post their reasoning at that repository.