如何避免 Handler Monad 中的 unsafePerformIO?
How to avoid unsafePerformIO in the Handler Monad?
我无法避免在 Yesod 处理程序中出现 unsafePerformIO。 Handler中的代码都在Handler Monad中,那么如何执行IO操作呢?
getProfileR :: Handler Html
getProfileR = do
-- toTMDBMovie's return-type is IO Movie
-- Without the unsafePerformIO the type of result would be IO [Movie]
-- How do I get from IO [Movie] to [Movie]?
-- Ignore reccMovies - it's just a parameter.
let result = unsafePerformIO $ mapM toTMDBMovie reccMovies
defaultLayout $ do
setTitle "Profile"
$(widgetFile "profile")
感谢您的帮助!
如果您正在使用的 monad m
属于 MonadIO
class,您可以使用 liftIO :: IO a -> m a
在其中执行 IO 操作。
至于 Yesod,您可以在其 Handler
操作以及 Persistent 的 runDB
块中执行 IO 操作。
我无法避免在 Yesod 处理程序中出现 unsafePerformIO。 Handler中的代码都在Handler Monad中,那么如何执行IO操作呢?
getProfileR :: Handler Html
getProfileR = do
-- toTMDBMovie's return-type is IO Movie
-- Without the unsafePerformIO the type of result would be IO [Movie]
-- How do I get from IO [Movie] to [Movie]?
-- Ignore reccMovies - it's just a parameter.
let result = unsafePerformIO $ mapM toTMDBMovie reccMovies
defaultLayout $ do
setTitle "Profile"
$(widgetFile "profile")
感谢您的帮助!
如果您正在使用的 monad m
属于 MonadIO
class,您可以使用 liftIO :: IO a -> m a
在其中执行 IO 操作。
至于 Yesod,您可以在其 Handler
操作以及 Persistent 的 runDB
块中执行 IO 操作。