Я пытаюсь сложить моно и ввод-вывод, но либо недостаточно хорошо понимаю монадные трансформаторы, либо это невозможно с помощью трансформаторов.Может ли кто-нибудь помочь мне понять это?
f :: String -> Maybe String
main :: IO ()
main = do
input <- getLine -- IO String
output <- f input -- Maybe String (Can't extract because it is IO do block)
writeFile "out.txt" output -- gives error because writeFile expects output :: String
В приведенном выше упрощенном примере у меня есть функция f
, которая возвращает Maybe String
, и я хотел бы иметь аккуратный способ извлечь это вIO
сделать блок.Я попытался
f :: String -> MaybeT IO String
main :: IO ()
main = do
input <- getLine -- IO String
output <- runMaybeT (f input) -- Extracts output :: Maybe String instead of String
writeFile "out.txt" output -- gives error because writeFile expects output :: String
, который позволяет мне извлечь Maybe String
во второй строке блока do
, но мне нужно извлечь строку из этого.Есть ли способ сделать это без использования case
?