我理解在Haskell中,最重要的是将最“变量”的参数(也就是输入对象)放在函数定义的最后,以使函数尽可能可组合(reference)。但是,如果我使用的库函数不遵循此规则,那么函数组合是否有任何替代/解决方法来提高可读性?
我将给出一个具体的例子 - subRegex函数将输入字符串作为两个参数中的第一个,因此链接其中两个加上toUpper
以创建“slugify”函数I最终得到了以下内容:
slugify :: FilePath -> FilePath
slugify old =
let (dir, file) = splitFileName old
in combine dir $ subRegex (mkRegex "[ _]") (subRegex (mkRegex "[^.a-z0-9_ ]+") (map toLower file) "") "-"
考虑到subRegex参数的顺序,是否有一种函数组合式的方式来整理它?
答案 0 :(得分:5)
你总是可以提供一个小助手来将参数顺序改为更可组合的东西:
slugify :: FilePath -> FilePath
slugify old =
let (dir, file) = splitFileName old
in combine dir $ sub "[ _]" "-" $ sub "[^.a-z0-9_ ]+" "" $ map toLower file
where
sub regex replacement input = subRegex (mkRegex regex) input replacement
在简单的情况下,您也可以使用flip
或lambda表达式,但在这种情况下,我认为本地定义更好。它还可以轻松删除对mkRegex
的重复呼叫。