Вычисление всех возможностей замены одного символа другим

> magicFunction 'l' '_' "hello world"
["he_lo world", "hel_o world", "hello wor_d"]

Есть ли такая волшебная функция в стандартном Prelude или ее можно легко скомпоновать с другими функциями?

И нет, это не домашняя работа, но все же, пожалуйста, не тратьте слишком много времени на -собственное сложное решение, я лучше сделаю это сам, чем потрачу ваше время; )Просто спрашиваю, есть ли это в стандарте.


РЕДАКТИРОВАТЬ :Вот моя первая попытка:

import Data.List (findIndices)

replace i y xs = take i xs ++ y : drop (i+1) xs

magicFunction x y xs = map (\i -> replace i y xs) (findIndices (== x) xs)

Можно ли его улучшить? Неужто что-то вроде replaceдолжно быть в стандарте? Я нашел replace :: Eq a => a -> a -> [a] -> [a]в Network.CGI.Protocol, но у него неправильная подпись.

6
задан fredoverflow 13 July 2012 в 16:57
поделиться