import System.IO.Streams (contramap) quux x = do foo <- contramap show x bar <- contramap Just foo return barВсе мы помним State-монаду, в которой состояние движется в другую сторону и взбирается по ду-нотации вверх. Сегодня я столкнулся с продвижением контрол-флоу против стрелок обычной монады IO.
Т.е. у нас "вход" как бы снизу, а x - это "выход". return bar отправляет этот вход в bar, дальше он проходит Just и отправляется в foo, а оттуда проходит через show и попадает в x
Тип соответствующий:
quux :: Show a => OutputStream String -> IO (OutputStream a)a "на входе", затем Just делает Maybe a, и show делает строку.