【发布时间】:2014-08-10 00:37:36
【问题描述】:
假设我们有三个通过 HTTP 获取数据的同步函数(这些可能是内部 API 调用):
lookupUser :: String -> IO UserId
lookupUserCity :: UserId -> IO City
lookupLocation :: City -> IO Location
所以,我可以只做一元组合lookupLocation <=< lookupUserCity <=< lookupUser 来获取用户的位置。但是,由于这些调用中的每一个都会阻塞,这将阻止程序的其余部分运行。
显然,延续有助于解决这个问题,但我找不到任何真实的例子。我认为签名会被重写a -> ContT r IO b,但我看不出你如何能用这个实现类似回调的模式。如果有人可以告诉我 (1) 如何写 transform :: (a -> IO b) -> (a -> ContT r IO b) 或 (2) 可以链接到某人这样做的真实示例,我将不胜感激。
【问题讨论】:
标签: haskell asynchronous continuations