Bool -> m () -> m () when p s = if p then s else return () when 函数-6ren">
gpt4 book ai didi

haskell - 如何理解 "m ()"是一元计算

转载 作者:行者123 更新时间:2023-12-02 10:34:00 25 4
gpt4 key购买 nike

来自document :

when :: (Monad m) => Bool -> m () -> m ()
when p s = if p then s else return ()

when 函数采用 bool 参数和单位 () 类型的一元计算,并且仅当 bool 参数为 True 时才执行计算>。

===

作为一个 Haskell 新手,我的问题是,对我来说 m () 是一些“void”数据,但这里文档将其称为计算。是因为Haskell的懒惰吗?

最佳答案

懒惰与此无关。

m/Monad 部分通常称为计算

最好的例子可能是m = IO:

看看putStrLn "Hello" :: IO () - 这是一个计算,运行时会将 "Hello" 打印到屏幕上。

此计算没有结果 - 因此返回类型为 ()

现在当你写

hello :: Bool -> IO ()
hello sayIt =
when sayIt (putStrLn "Hello")

then hello True 是一个计算,运行时将打印 "Hello";而 hello False 是一种计算,运行时不会执行任何操作。

<小时/>

现在将其与 getLine :: IO String 进行比较- 这是一个计算,运行时会提示您输入,并将输入作为 String 返回 - 这就是返回类型为 String 的原因。

这有帮助吗?

关于haskell - 如何理解 "m ()"是一元计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33210528/

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