Я могу написать следующее:Взаимно рекурсивные определения IO
f :: [Int] -> [Int]
f x = 0:(map (+1) x)
g :: [Int] -> [Int]
g x = map (*2) x
a = f b
b = g a
main = print $ take 5 a
И все работает прекрасно (ideone).
Однако, позволяет сказать, что я хочу g
сделать нечто более сложное, чем умножить на 2, как попросить пользователя число и добавить, что, например, так:
g2 :: [Int] -> IO [Int]
g2 = mapM (\x -> getLine >>= (return . (+x) . read))
Как я тогда, ну, галстук узел?
Разъяснение:
В основном я хочу список Int
с от f
быть вход g2
и список Int
с от g2
быть вход f
.
Возможно, вы захотите посмотреть 'mfix' с' Control.Monad.Fix'. – dfeuer
Можете ли вы попытаться уточнить, что именно * вы пытаетесь сделать? – dfeuer
Именно в качестве примера, за исключением замены 'g' на' g2'. – Clinton