有没有更优雅的方法来搜索 max 并转换为 Int
Is there a more elegant way to do search for max and conversion to Int
给定以下函数
maxInt :: Array Number -> Int
maxInt xs = fromMaybe 0 $ join $ fromNumber <$> maximum xs
maxInt [ 2.0, 4.0, 1.0, 5.0 ] => 5
有没有更优雅的方法来做到这一点?有很多剥离掉Maybe
s
首先将 fromNumber
应用于整个输入,然后取 that 列表中的最大值。这样,所有无效值首先转换为 Nothing
,maximum
将忽略。
maxInt = fromMaybe 0 . maximum . (map fromNumber)
(这是有效的,因为 Ord a => Maybe a
是 Ord
的一个实例;Nothing
小于任何 Just
值,并且 Just
值按基础价值。)
如果 fromNumber (maximum xs) == Nothing
,这也修复了一个潜在的错误。在那种情况下,maxInt
会 return 0,即使有一些稍微小一点的值 y
这样 fromNumber y
不是 Nothing
.
您确定要使用默认大小写 0 来处理吗?如果是这样,您正在寻找 maxInt xs = fromMaybe 0 $ fromNumber =<< maximum xs
。如果没有,请保留 Maybe 并像 maxInt = fromNumber <=< maximum
.
那样做
给定以下函数
maxInt :: Array Number -> Int
maxInt xs = fromMaybe 0 $ join $ fromNumber <$> maximum xs
maxInt [ 2.0, 4.0, 1.0, 5.0 ] => 5
有没有更优雅的方法来做到这一点?有很多剥离掉Maybe
s
首先将 fromNumber
应用于整个输入,然后取 that 列表中的最大值。这样,所有无效值首先转换为 Nothing
,maximum
将忽略。
maxInt = fromMaybe 0 . maximum . (map fromNumber)
(这是有效的,因为 Ord a => Maybe a
是 Ord
的一个实例;Nothing
小于任何 Just
值,并且 Just
值按基础价值。)
如果 fromNumber (maximum xs) == Nothing
,这也修复了一个潜在的错误。在那种情况下,maxInt
会 return 0,即使有一些稍微小一点的值 y
这样 fromNumber y
不是 Nothing
.
您确定要使用默认大小写 0 来处理吗?如果是这样,您正在寻找 maxInt xs = fromMaybe 0 $ fromNumber =<< maximum xs
。如果没有,请保留 Maybe 并像 maxInt = fromNumber <=< maximum
.