Мне интересно, существует ли стандартная функция, которая выполняет итерацию функции, которая возвращает значение (возможно значение) над начальным значением, собирая значения в списке, но заканчивая список, когда он получает значение Nothing. Эта функция может быть реализована, например, так:Есть ли стандартная функция Haskell, такая как итерация, которая останавливается на Nothing?
iterateMaybe f a = a : iterMaybe (f a) where
iterMaybe Nothing = []
iterMaybe (Just a) = a : iterMaybe (f a)
или немного по-другому, как так:
iterateMaybe' f Nothing = []
iterateMaybe' f (Just a) = a : iterateMaybe' f (f a)
Ни один the functions that Hoogle finds матч.
И, конечно, вы можете выполнить 'iterateMaybe f x = x: helper f x', где' helper' имеет определение 'iterateMaybe', указанное в ответе. Это дает вам список, начинающийся с исходного элемента. – amar47shah