gpt4 book ai didi

haskell - 为什么 `print <$> (print "你好“)` print "你好”?

转载 作者:行者123 更新时间:2023-12-03 15:29:32 27 4
gpt4 key购买 nike

计算时IO (IO ()) , 两个 (IO ())()是计算出来的,所以为什么

main :: IO (IO ())
main = print <$> (print "Hello, World!")

打印

"Hello, World!"

不是

IO "Hello, World!" -- ??
"Hello, World!"

最佳答案

main :: IO (IO ())
main = print <$> (print "Hello, World!")

由于单子(monad)定律,等价于
main :: IO (IO ())
main = do
result <- print "Hello, World!"
return (print result)

现在, print总是返回 ()结果,所以整个代码相当于
main :: IO (IO ())
main = do
_ <- print "Hello, World!"
return (print ())

最后是 main的结果被简单地丢弃。也就是说,最后一行可能是 return (putStrLn "this is ignored")并具有相同的效果。

因此代码将只执行第一个 print "Hello, World!" .

我建议您始终定义 main :: IO () . Haskell 允许我们声明 main :: IO AnyTypeHere ,但这(IMO)令人困惑。

我还建议您使用 putStrLn , 而不是 print打印字符串,因为后者将引用和转义整个字符串。

关于haskell - 为什么 `print <$> (print "你好“)` print "你好”?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58485062/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com