Haskell 理解ListIO示例
以下是作者精心编写的:Haskell 理解ListIO示例,haskell,Haskell,以下是作者精心编写的: TL;DR:若你们在GHCi中看到了一些你们并没有预料到的东西,那个么想想产生这种结果的线的类型 test的类型为ListT IO()。如果我们在ListT ma上使用runListT,我们最终得到的是m[a]: *Main> runListT test ([1,2],'a') ([1,2],'b') [(),()] runListT :: Monad m => ListT m a -> m [a] test :
TL;DR:若你们在GHCi中看到了一些你们并没有预料到的东西,那个么想想产生这种结果的线的类型
test
的类型为ListT IO()
。如果我们在ListT ma
上使用runListT
,我们最终得到的是m[a]
:
*Main> runListT test
([1,2],'a')
([1,2],'b')
[(),()]
runListT :: Monad m => ListT m a -> m [a]
test :: ListT IO ()
runListT test :: IO [()]
由于可以显示[()]
(而不是()
),GHCi将显示结果。如果绑定它,您将看不到它:
*Main> res <- runListT test
([1,2],'a')
([1,2],'b')
*Main> res
[(),()]
这是提升的输出。
*Main> res <- runListT test
([1,2],'a')
([1,2],'b')
*Main> res
[(),()]
*Main> let runListT_ m = runListT m >> return ()
*Main> runListT_ test
([1,2],'a')
([1,2],'b')