3

我有一个String包含多个标签的表单${...}(其中...可以是任何不包含字符的}字符串),例如foo ${bar} baz ${qux}.

我想替换这些标签,但要做到这一点,我需要以下形式的函数:

replace :: [String] -> [String] -> String -> String
--           tags    replacements  target    result
replace ["${bar}", "${qux}"] ["abc", "def"] "foo ${bar} baz ${qux}" == "foo abc baz def"

(当给定数组作为参数时,这类似于 PHP 的str_replace函数。)

我在任何包中都找不到这样的替换功能。是否有这样的功能,如果没有,我将如何编写它(指向正确的方向就足够了;我正在学习 Haskell)?

4

1 回答 1

4

作为一个单行:

Prelude Data.Text> Prelude.foldr (uncurry Data.Text.replace) "foo ${bar} baz ${qux}" $ Prelude.zip ["${bar}", "${qux}"] ["abc", "def"]
"foo abc baz def"

换句话说:

replace as bs x = Prelude.foldr (uncurry Data.Text.replace) x $  Prelude.zip as bs
于 2012-07-23T21:03:06.613 回答