У меня есть несколько типов данных в контексте IO, как:Трансформация (а -> IO б) в IO (а -> б)
a :: IO String
b :: IO FilePath
c :: String -> IO String
Я хочу, чтобы поместить их всех вместе в одном объекте данных, например, :
data Configdata = Configdata String FilePath (String -> String)
Так что я не должен получить значение каждого за свое собственное из контекста IO, но только из IO Configdata
.
Критическая точка, где у меня нет решения, как я могу преобразовать String -> IO String
в IO (String -> String)
. Hoogle не дает мне никаких функций, которые способны это сделать.
Я не уверен, возможно ли это даже невозможно, так как вход функции, возможно, бесконечен.
Есть ли у кого-нибудь решение или объяснение, почему это невозможно? Я знаю, что использование списка вместо функции является опцией, но я бы предпочел использовать функцию, если это возможно.
Это на самом деле несовместимо. В 'String -> IO String' вычисление IO может зависеть от аргумента в' IO (String -> String) 'оно не может. – Bergi
@ Берги это прекрасно. Это ключевое различие между Аппликативным и Монадом. – user2297560