haskell,如何解开IO monad

时间:2016-04-19 20:41:19

标签: haskell io monads

我可以这样做:runIdentityrunErrorT以及更多来解开内在的monad 但是,如果IO (Either String Int),我该怎么办?如何打开它?

1 个答案:

答案 0 :(得分:3)

您无法解开IO a次操作。相反,您将它们包含在main操作(具有IO类型,因此可以使用此类操作)中,并且编译器确保执行main

您还可以教授不理解IO如何处理IO的函数;例如,我们有:

fmap  :: (a ->    b) -> IO a -> IO b
(=<<) :: (a -> IO b) -> IO a -> IO b

因此,如果您有一个消耗Either String Int的函数,您可以使用上述函数之一来教它如何使用IO (Either String Int)

如需进一步阅读,您可以享受The IO Monad for People Who Simply Don't Care。 (我也喜欢monad教程You Could Have Invented Monads! (And Maybe You Already Have.)All About Monads,尽管它们与这个问题不太直接相关。)