История изменений
Исправление
hateyoufeel,
(текущая версия)
:
В списке тоже можно [1,2,error IOException] делать.
error – это не исключение, это другая штука совершенно. Их важно различать. И как именно ты перехватывать IOException собрался?
В смысле, с Polysemy сравнивали? А с interact?
interact – это тупо \f -> putStrLn . f =<< getLine, в этом нет ничего особенного. Даже сигнатуры одинаковые.
Prelude> :t \f -> putStrLn . f =<< getLine
\f -> putStrLn . f =<< getLine :: (String -> String) -> IO ()
Prelude> :t interact
interact :: (String -> String) -> IO ()
Твой подход с interact слишком примитивен и не работает, например, когда нужны треды и их синхронизация.
Исправление
hateyoufeel,
:
В списке тоже можно [1,2,error IOException] делать.
error – это не исключение, это другая штука совершенно. Их важно различать.
В смысле, с Polysemy сравнивали? А с interact?
interact – это тупо \f -> putStrLn . f =<< getLine, в этом нет ничего особенного. Даже сигнатуры одинаковые.
Prelude> :t \f -> putStrLn . f =<< getLine
\f -> putStrLn . f =<< getLine :: (String -> String) -> IO ()
Prelude> :t interact
interact :: (String -> String) -> IO ()
Твой подход с interact слишком примитивен и не работает, например, когда нужны треды и их синхронизация.
Исходная версия
hateyoufeel,
:
В списке тоже можно [1,2,error IOException] делать.
error – это не исключение, это другая штука совершенно. Их важно различать.
В смысле, с Polysemy сравнивали? А с interact?
interact – это тупо \f -> putStrLn . f =<< getLine, в этом нет ничего особенного. Даже сигнатуры одинаковые.
Prelude> :t \f -> putStrLn . f =<< getLine
\f -> putStrLn . f =<< getLine :: (String -> String) -> IO ()
Prelude> :t interact
interact :: (String -> String) -> IO ()