我想定义一个safeIndex
适用于Foldable
类型的函数
safeIndex :: (Foldable t, Integral i) => t a -> i -> Maybe a
safeIndex = foldr step (const Nothing)
where
step :: Integral i => a -> (i -> Maybe a) -> i -> Maybe a
step x f i = if i == 0
then Just x
else f (i - 1)
但它不适用于无限列表。为了foldr
在中间停止,我认为我们必须确定它是否应该只用 的第一个参数停止step
,这似乎是不可能的。
是否可以修复该功能以使其适用于无限结构?如果不是,我们应该限制哪些类型类t
?