По совету, который я получил здесь, я пытаюсь переписать функцию без постороннего назначения привязки и возврата, но застрял с дополнительный ввод-вывод, я не могу понять, как из него выбраться.
У меня есть
good :: IO (Either Int String)
getit :: Either Int String -> Int
main :: IO ()
main = do
x <- fmap getit good
putStrLn $ show x
главное работает нормально. Но....
main2 :: IO ()
main2 = do
putStrLn $ show $ fmap getit good
-- let's try totally without do
main3 :: IO ()
main3 = putStrLn $ fmap show $ fmap getit good
main2 терпит неудачу с:
• No instance for (Show (IO Int)) arising from a use of ‘show’
• In the second argument of ‘($)’, namely ‘show $ fmap getit good’
In a stmt of a 'do' block: putStrLn $ show $ fmap getit good
In the expression: do { putStrLn $ show $ fmap getit good }
И main3 терпит неудачу с:
• Couldn't match type ‘IO’ with ‘[]’
Expected type: String
Actual type: IO String
Как правильно переписать это идиоматически?
(Подвопрос: «‹-» этот парень на самом деле назвал привязкой? Через здесь: Есть ли произносимые имена для распространенных операторов Haskell? )