通过管道教程导致玩弄一些示例:
import Pipes
import qualified Pipes.Prelude as P
f1 :: Show a => Int -> [a] -> IO ()
f1 n xs = runEffect $ (for (each xs) (lift . putStrLn . show))
>-> P.take n
>-> P.stdoutLn
f2 :: Show a => Int -> [a] -> IO ()
f2 n xs = runEffect $ each xs
>-> P.map show
>-> P.take n
>-> P.stdoutLn
但以上产生:
>>> f1 3 [1..10]
1
2
3
4
5
6
7
8
9
10
>>> f2 3 [1..10]
1
2
3
>>>
与我的预期相反,f1 和 f2 会产生相同的结果(即 f2 的结果)。问题是:他们为什么不呢?