给定以下功能
maxInt :: Array Number -> Int
maxInt xs = fromMaybe 0 $ join $ fromNumber <$> maximum xs
maxInt [ 2.0, 4.0, 1.0, 5.0 ] => 5
有没有更优雅的方法来做到这一点?有很多剥离Maybe
s
给定以下功能
maxInt :: Array Number -> Int
maxInt xs = fromMaybe 0 $ join $ fromNumber <$> maximum xs
maxInt [ 2.0, 4.0, 1.0, 5.0 ] => 5
有没有更优雅的方法来做到这一点?有很多剥离Maybe
s
您确定要使用默认大小写 0 来处理它吗?如果是这样,您正在寻找maxInt xs = fromMaybe 0 $ fromNumber =<< maximum xs
. 如果没有,请保留 Maybe 并像maxInt = fromNumber <=< maximum
.
首先应用fromNumber
到整个输入,然后取该列表的最大值。这样一来,所有无效值都会被转换为Nothing
first,这maximum
将被忽略。
maxInt = fromMaybe 0 . maximum . (map fromNumber)
(这是有效的,因为;Ord a => Maybe a
的一个实例小于任何值,并且值按基础值排序。)Ord
Nothing
Just
Just
这也修复了一个潜在的错误,如果fromNumber (maximum xs) == Nothing
. 在这种情况下,maxInt
将返回 0,即使存在一些稍小的值y
,例如fromNumber y
not Nothing
。