не должен
return f — это вы заворачиваете функцию в IO. и что вы ожидаете от этого?
чтобы writeFile исполнить, надо 1. передать ей оба параметра 2. вызвать в контексте IO
я просто написал writeFile ... компилятор мне ошибку выдал, поэтому в return завернул. Мне по сути просто пустышки надо сделать. То есть создать пустые файлы.
у вас тут ошибка в логике
Вот и получается: writeFile name :: String -> IO return $ writeFile name :: IO (String -> IO) Дальше идёт связка через (>>), и частично-вычисленная функция writeFile затирается () от выполнения putStrLn.
Вообщем создался файл.
не могу согласиться с импликацией «компилятор мне ошибку выдал, поэтому в return завернул». далеко не любая ошибка решается заворачиванием неправильного кода в return. точнее, только одна — когда надо использовать чистое значение, а требуется монадный контекст. в данном случае, я уверен, в ошибке компилятора было написано • Couldn't match expected type ‘IO b’ with actual type ‘String -> IO ()’ • Probable cause: ‘writeFile’ is applied to too few arguments а если аргументов у writeFile слишком мало, то стоит проверить, сколько их должно быть
Обсуждают сегодня