链接操作在do块中共享数据

时间:2016-02-17 11:36:49

标签: haskell io

好的,假设我有IO个操作; loadFile :: FilePath -> ByteString处理processData :: ByteString -> ProcessedData这个操作非常有用,我想在两个动作中使用这个处理过的数据,如下所示:

main = do
{
   bytes <- loadFile "....";
   let data = processData bytes
   in printf (extractFoo data address1)
      printf (extractFoo data address2) -- Compiler error    
}

我知道我可以这样做,这基本上不会在两个动作之间共享data

main = do
{
   bytes <- loadFile "....";
   let data = processData bytes
   in printf (extractFoo data address1);
   let data = processData bytes
   in printf (extractFoo data address2);    
}

如何在data中分享printf?我对Haskell很新,我正在与IO monad斗争。我试图理解它,但到目前为止这是一个缓慢的过程。

1 个答案:

答案 0 :(得分:5)

只需删除大括号并使用普通let

main = do
   bytes <- loadFile "...."
   let d = processData bytes
   printf (extractFoo d address1)
   printf (extractFoo d address2)

我将您的data重命名为d,因为data是Haskell中的关键字。