Maybe常用方法

fromMaybe

描述:当 Maybe 值为 Nothing 时,返回一个默认值。

类型签名

1
fromMaybe :: a -> Maybe a -> a

示例

1
2
3
4
5
import Data.Maybe (fromMaybe)

-- 如果值为 Nothing,将使用默认值 10
let result = fromMaybe 10 Nothing -- 结果为 10
let result2 = fromMaybe 10 (Just 5) -- 结果为 5

readMaybe

描述:解析字符串为指定类型(如 Int),如果解析失败则返回 Nothing。

类型签名

1
readMaybe :: Read a => String -> Maybe a

示例

1
2
3
4
import Text.Read (readMaybe)

let parsedInt = readMaybe "123" :: Maybe Int -- 结果为 Just 123
let parsedFail = readMaybe "abc" :: Maybe Int -- 结果为 Nothing

mapMaybe

描述:对列表中的每个元素进行转换,并过滤掉转换失败的元素。

类型签名

1
mapMaybe :: (a -> Maybe b) -> [a] -> [b]

示例

1
2
3
4
import Data.Maybe (mapMaybe)

-- 将字符串列表尝试转换为 Int,仅保留成功转换的结果
let result = mapMaybe readMaybe ["123", "abc", "456"] -- 结果为 [123, 456]

catMaybes

描述:将列表中所有 Just 的值提取出来,忽略 Nothing。

类型签名

1
catMaybes :: [Maybe a] -> [a]

示例

1
2
3
import Data.Maybe (catMaybes)

let result = catMaybes [Just 1, Nothing, Just 2, Nothing, Just 3] -- 结果为 [1, 2, 3]

maybe

描述:将 Maybe 转换为另一个值。第一个参数为 Nothing 的转换值,第二个参数为 Just 的转换函数。

类型签名

1
maybe :: b -> (a -> b) -> Maybe a -> b

示例

1
2
let result = maybe 0 (*2) (Just 5)    -- 结果为 10
let result2 = maybe 0 (*2) Nothing -- 结果为 0

hoistMaybe

描述:将一个普通值转换为 Maybe 值:如果条件满足则返回 Just,否则返回 Nothing。

类型签名

1
hoistMaybe :: Bool -> a -> Maybe a

示例

1
2
3
4
5
hoistMaybe :: Bool -> a -> Maybe a
hoistMaybe condition value = if condition then Just value else Nothing

let result = hoistMaybe (5 > 3) "符合条件" -- 结果为 Just "符合条件"
let result2 = hoistMaybe (5 < 3) "不符合条件" -- 结果为 Nothing