@Jell As I understand, there were a couple of reasons for dropping it and I can relate to them all. The first was that it could be hard to get the rows to line up, and in a non-trivial program you have many rows. Second, libraries need to agree on the row. Otherwise you will have both console :: CONSOLE and c :: OtherLibrary.CONSOLE as rows. Third, it's a phantom type, so it doesn't actually do anything other than restrict what you can do. It's not like algebraic effects where you can reinterpret the effect.

I do like that you can restrict what you can do in the type though, but mostly I think because it feels good to know that a piece of code only write to the console, not to disc, for instance. I haven't had to use that in practice though, but then I haven't debugged much as that level.

I do think that maybe calling it Effect could prove be unfortunate, especially since FP people use the word effect for any monad basically, even Maybe or error handling using Either, which is very much pure.