我对 Haskell 比较陌生,并开始阅读“Real World Haskell”。
我刚刚偶然发现了 Maybe 类型,并且有一个关于如何从 a 接收实际值的问题Just 1
例如。
我编写了以下代码:
combine a b c = (eliminate a, eliminate b, eliminate c)
where eliminate (Just a) = a
eliminate Nothing = 0
如果我使用以下方法,效果很好:
combine (Just 1) Nothing (Just 2)
但是,如果我将 1 更改为字符串,则它不起作用。
我想我知道为什么:因为eliminate
必须返回一种类型,在本例中是一个Int
。但我该如何改变eliminate
至少处理字符串(或者可能处理所有类型)?
从标准来看Prelude https://hackage.haskell.org/package/base-4.10.0.0/docs/Prelude.html#v:maybe,
maybe :: b -> (a -> b) -> Maybe a -> b
maybe n _ Nothing = n
maybe _ f (Just x) = f x
给定一个默认值和一个函数,将该函数应用于Maybe
或返回默认值。
Your eliminate
可以写成maybe 0 id
,例如应用恒等函数,或返回 0。
从标准来看Data.Maybe https://hackage.haskell.org/package/base-4.10.0.0/docs/Data-Maybe.html#v:fromJust,
fromJust :: Maybe a -> a
fromJust Nothing = error "Maybe.fromJust: Nothing"
fromJust (Just x) = x
这是一个partial函数(不会为每个输入返回一个值,与total函数,确实如此),但在可能的情况下提取值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)