Haskell-左箭头与嵌套case语句

Haskell-左箭头与嵌套case语句,haskell,monads,Haskell,Monads,我到处寻找这个的定义/描述,但没有成功。当我从第一原理开始Haskell编程时,在monads简介章节(第763页)中,它展示了一个嵌套case语句的示例: mksphereicalcow::String->Int->Int->Cow mkSphericalCow名称“年龄”“体重”= 案例名称不为空 无->无 只是纳米-> 例非负性年龄 无->无 只是年龄-> 案例非负权重 无->无 只是重量-> 重量检查 (奶牛纳米年龄体重) 它说,它可以被以下内容取代: mkSphericalCow':

我到处寻找这个的定义/描述,但没有成功。当我从第一原理开始Haskell编程时,在monads简介章节(第763页)中,它展示了一个嵌套case语句的示例:

mksphereicalcow::String->Int->Int->Cow
mkSphericalCow名称“年龄”“体重”=
案例名称不为空
无->无
只是纳米->
例非负性年龄
无->无
只是年龄->
案例非负权重
无->无
只是重量->
重量检查
(奶牛纳米年龄体重)
它说,它可以被以下内容取代:

mkSphericalCow':字符串->整数->整数->可能是奶牛
mkSphericalCow'name'年龄'weight'=do

nammyA
do
表达式被分解为一系列
>=
函数。描述了如何对表达式进行解压缩。在您的情况下,这意味着表达式被删除为:

mkSphericalCow' :: String -> Int -> Int -> Maybe Cow
mkSphericalCow' name' age' weight' = noEmpty name' >>= (\nammy -> noNegative age' >>= (\agey -> nonNegative weight' >>= (\weighty -> weightCheck (Cow nammy agey weighty))))
对于
Maybe
而言,
Monad
的实例是:

可能
可视为计算可能失败的结果。
Nothing
是计算失败的结果,而
Just…
是数据构造函数中包装的计算结果

Monad
的实例使我们能够“链接”这样的计算。这意味着如果所有计算都成功,它将只返回一个
Just…
(返回一个
Just…
)。所以在你的表达中:

mkSphericalCow' :: String -> Int -> Int -> Maybe Cow
mkSphericalCow' name' age' weight' = do
    nammy <- noEmpty name'
    agey <- noNegative age'
    weighty <- noNegative weight'
    weightCheck (Cow nammy agey weighty)

这里我们利用
函子和
应用的
实例
Maybe
,在这里我们将生成
Maybe Cow
,即
Just(Cow a b c)
给定
Just a=noEmpty name'
Just b=noNegative age'
Just c=noNegative weight'
。然后,我们使用
>=
函数来展开
Just
数据构造函数,并将
Just
中包装的值传递给
权重检查

一个
do
表达式被分解为一系列
=/code>函数。描述了如何对表达式进行解压缩。在您的情况下,这意味着表达式被删除为:

mkSphericalCow' :: String -> Int -> Int -> Maybe Cow
mkSphericalCow' name' age' weight' = noEmpty name' >>= (\nammy -> noNegative age' >>= (\agey -> nonNegative weight' >>= (\weighty -> weightCheck (Cow nammy agey weighty))))
对于
Maybe
而言,
Monad
的实例是:

可能
可视为计算可能失败的结果。
Nothing
是计算失败的结果,而
Just…
是数据构造函数中包装的计算结果

Monad
的实例使我们能够“链接”这样的计算。这意味着如果所有计算都成功,它将只返回一个
Just…
(返回一个
Just…
)。所以在你的表达中:

mkSphericalCow' :: String -> Int -> Int -> Maybe Cow
mkSphericalCow' name' age' weight' = do
    nammy <- noEmpty name'
    agey <- noNegative age'
    weighty <- noNegative weight'
    weightCheck (Cow nammy agey weighty)

这里我们利用
函子和
应用的
实例
Maybe
,在这里我们将生成
Maybe Cow
,即
Just(Cow a b c)
给定
Just a=noEmpty name'
Just b=noNegative age'
Just c=noNegative weight'
。然后,我们使用
>=
函数来打开
Just
数据构造函数,并将
Just
中包装的值传递给
权重检查

它确实使用了
Maybe
的monad实例。它确实使用了
Maybe
的monad实例。