Хабр Курсы для всех
РЕКЛАМА
Большая витрина: от крупнейших школ до частных авторов. Сравнивайте по цене, длительности, формату и выбирайте самый подходящий курс!
a -- [IO] -> btest :: String -> IO ()
test = runKleisli (Klesli purStrLn . arr (map toUpper) . Kleisli readFile)test :: String -> IO ()
test = (putStrLn =<<) . fmap (map toUpper) . readFile
main = test "Kleisli.hs"
test2 = fmap (putStrLn . map toUpper) . readFile
IO (IO ())test2 ничего не печатает, он возвращает монадное действие, которое уже печатает. Чтобы реально напечатать надо сделать так:do
action <- test2
action
join test2
Еще Одно Руководство по Монадам (часть 1: основы)