Haskell-左箭头与嵌套case语句
我到处寻找这个的定义/描述,但没有成功。当我从第一原理开始Haskell编程时,在monads简介章节(第763页)中,它展示了一个嵌套case语句的示例:Haskell-左箭头与嵌套case语句,haskell,monads,Haskell,Monads,我到处寻找这个的定义/描述,但没有成功。当我从第一原理开始Haskell编程时,在monads简介章节(第763页)中,它展示了一个嵌套case语句的示例: mksphereicalcow::String->Int->Int->Cow mkSphericalCow名称“年龄”“体重”= 案例名称不为空 无->无 只是纳米-> 例非负性年龄 无->无 只是年龄-> 案例非负权重 无->无 只是重量-> 重量检查 (奶牛纳米年龄体重) 它说,它可以被以下内容取代: mkSphericalCow':
mksphereicalcow::String->Int->Int->Cow
mkSphericalCow名称“年龄”“体重”=
案例名称不为空
无->无
只是纳米->
例非负性年龄
无->无
只是年龄->
案例非负权重
无->无
只是重量->
重量检查
(奶牛纳米年龄体重)
它说,它可以被以下内容取代:
mkSphericalCow':字符串->整数->整数->可能是奶牛
mkSphericalCow'name'年龄'weight'=do
nammyAdo
表达式被分解为一系列>=
函数。描述了如何对表达式进行解压缩。在您的情况下,这意味着表达式被删除为:
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实例。