liftIO而不是组合提升

时间:2016-04-10 21:18:32

标签: haskell

  

在本文档中,我们在eval6中调用liftIO来执行I / O操作。   在这种情况下,为什么我们需要解除?因为没有IO类   我们可以将类型实例化为。因此,对于I / O操作,我们   必须调用lift才能向内发送命令。对于eval6,我们会   需要组合电梯四次打印东西。这只是   不方便,所以人们创建了一个新类MonadIO,这样我们才有   需要调用一次liftIO,而不必计算多少   构成电梯的时间:

class (Monad m) => MonadIO m where
liftIO :: IO a -> m a
instance MonadIO IO where
liftIO = id
instance (Error e, MonadIO m) => MonadIO (ErrorT e m) where
liftIO = lift . liftIO
instance (MonadIO m) => MonadIO (ReaderT r m) where
liftIO = lift . liftIO

引文来自http://www.cs.virginia.edu/~wh5a/personal/Transformers.pdf

再一次,我无法理解为什么我们需要四次调用liftIO。我无法看到它因此请说清楚;)

0 个答案:

没有答案