Разница в том, что если десугарить эту запись как было тобой предложено, то программы в ней не будут ссылочно прозрачны, как ты и указал в примере выше.
А если десугарить по второму варианту, то это свойство будет сохранятся, т.е. есть ли мы заменим read_line_io на возвращаемое значение, то получим:
(lambda _: получение из консоли строки).bind(lambda a: a + "\n")
Что сохранит нужное нам поведение