updateCustom (Cons x xs) i y
  | i < 0 = Nothing
  | i == 0 = return (Cons y xs)
  | otherwise = do
      new <- updateCustom xs (pred i) y
      return (Cons x new)

--exec 2.1
updateCustom (Cons x xs) i y
  | i < 0 = Nothing
  | i == 0 = return (Cons y xs)
  | otherwise = do
      new <- updateCustom xs (pred i) y
      return (Cons x new)

--exec 2.1
updateCustom (Cons x xs) i y
  | i < 0 = Nothing
  | i == 0 = return (Cons y xs)
  | otherwise = do
      new <- updateCustom xs (pred i) y
      return (Cons x new)

--exec 2.1