Is print
在 Haskell 中是纯函数;为什么或者为什么不?我认为不是,因为它并不总是返回与纯函数应返回的值相同的值。
类型的值IO Int
并不是真正的Int
。它更像是一张纸,上面写着“嘿 Haskell 运行时,请生成一个Int
如此这般的价值”。这张纸是惰性的并且保持不变,即使Int
运行时最终产生的s是不同的。
您可以通过将这张纸分配给来将其发送到运行时main
。如果IO
行动永远不会妨碍main
相反,它会在某个容器内滞留,永远不会被执行。
返回的函数IO
行为和其他人一样纯粹。他们总是返回同一张纸。运行时如何处理这些指令是另一回事。
If they weren不纯粹,我们在改变之前必须三思而后行
foo :: (Int -> IO Int) -> IO Int
foo f = liftA2 (+) (f 0) (f 0)
to:
foo :: (Int -> IO Int) -> IO Int
foo f = let x = f 0 in liftA2 (+) x x
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)