努力简化代码的斗争

0 haskell

我有以下方法:

mainFunction arg1 = "http://someBaseUrl.com/" ++ arg1
url1 x = mainFunction x ++ "/subUrl1"
url2 x = mainFunction x ++ "/subUrl2"
url3 x = mainFunction x ++ "/subUrl3"
url4 x = mainFunction x ++ "/subUrl4"
Run Code Online (Sandbox Code Playgroud)

我的直觉告诉我它必须简化.但我无法弄清楚如何.

但是,我不能这样做,因为它不一样:

url1 = (mainFunction .) ++ "/subUrl1"
Run Code Online (Sandbox Code Playgroud)

你的建议?

mb1*_*b14 5

你可以做

url s x = mainFunction x ++ s
url1 = url "/subUrl1"
url2 = url "/subUrl2"
Run Code Online (Sandbox Code Playgroud)

等......

如果你真的要编写尽可能少的代码并避免调用url树时,你可以使用这个技巧(但是,我不确定是否推荐)

[url1, url2, url3, url4] = map url ["/subUrl1", "/subUrl2", "subUrl3", "subUrl4"]
Run Code Online (Sandbox Code Playgroud)

这将宣布四项功能url1,... url4.