【发布时间】:2016-08-18 12:11:33
【问题描述】:
我在 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 完美地说明了这一点。这是 Applicative 和 Monad 之间的主要区别。
-
stackoverflow.com/q/18890408 的可能重复项。
标签: haskell functional-programming monads io-monad lifting