如何从 IO Monad 调用 Handler Monad 中的函数
How to call functions in Handler Monad from IO Monad
我正在 Yesod 中构建 Web 应用程序。
我有两个
类型的函数
funA :: String -> IO ()
funB :: String -> Handler (Either a b)
有什么方法可以从 funA 内部调用 funB 之类的东西
res <- funB
case res of ...
不改变 funA 的类型。
我不太清楚 monad 的 运行 功能是做什么的,但我在其他一些库中使用过它来达到这个效果,但是对于 Yesod 来说,运行Handler 方法是为了内部使用 only.Does 它有一些其他方法来完成相同的任务吗?
如果您使用堆栈的 yesod-simple
(或朋友)模板,那么默认情况下,该模板将包含一个名为 handler
[GitHub]:
的函数
-- | Run a handler
handler :: Handler a -> IO a
handler h = getAppSettings >>= makeFoundation >>= flip unsafeHandler h
因此,这使您能够 运行 Handler a
IO a
。
因此您可以 运行 您的函数,例如:
funA :: String -> IO ()
funA parameter = do
res <- <b>handler</b> (funB parameter)
case res of
Left x -> ...
Right y -> ...
我正在 Yesod 中构建 Web 应用程序。
我有两个
类型的函数funA :: String -> IO ()
funB :: String -> Handler (Either a b)
有什么方法可以从 funA 内部调用 funB 之类的东西
res <- funB
case res of ...
不改变 funA 的类型。
我不太清楚 monad 的 运行 功能是做什么的,但我在其他一些库中使用过它来达到这个效果,但是对于 Yesod 来说,运行Handler 方法是为了内部使用 only.Does 它有一些其他方法来完成相同的任务吗?
如果您使用堆栈的 yesod-simple
(或朋友)模板,那么默认情况下,该模板将包含一个名为 handler
[GitHub]:
-- | Run a handler handler :: Handler a -> IO a handler h = getAppSettings >>= makeFoundation >>= flip unsafeHandler h
因此,这使您能够 运行 Handler a
IO a
。
因此您可以 运行 您的函数,例如:
funA :: String -> IO ()
funA parameter = do
res <- <b>handler</b> (funB parameter)
case res of
Left x -> ...
Right y -> ...