Haskell:有没有安全/完整的(!!)版本?



我试着在google上查找Int -> [a] -> Maybe a,但是没有运气。

我觉得这应该在标准库的某个地方,但我不知道在哪里。

有一个库叫做Safe on Hackage,它包含一个函数:

atMay :: [a] -> Int -> Maybe a

在标准库中没有(虽然会很好),但这里有一种实现它的方法(也适用于无限列表):

(!!!) :: [a] -> Int -> Maybe a
[]     !!! _ = Nothing
(x:xs) !!! n
    | n < 0     = Nothing
    | n == 0    = Just x
    | otherwise = xs !!! (n-1)

这种函数的可能定义(主要是从(!!)的定义中窃取的):

xs     !!! n | n < 0 =  Nothing
[]     !!! _         =  Nothing
(x:_)  !!! 0         =  Just x
(_:xs) !!! n         =  xs !!! (n-1)

(!!!) :: [a] -> Int -> Maybe a
xs !!! n = Maybe.listToMaybe $ drop n xs

相关内容

最新更新