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

时间:2011-10-14 13:26:16

标签: haskell

我试过了looking up Int -> [a] -> Maybe a on hoogle,但没有运气。

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

4 个答案:

答案 0 :(得分:9)

Hackage上有一个名为Safe的库,它包含一个函数:

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

答案 1 :(得分:4)

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

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

答案 2 :(得分:3)

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

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

答案 3 :(得分:3)

怎么样

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