Haskell 函数参数顺序错误时的函数合成

Haskell 函数参数顺序错误时的函数合成,haskell,Haskell,我理解在Haskell中,重要的是在函数定义中将最“可变”的参数(即输入对象)放在最后,以使函数尽可能可组合()。但是,如果我使用的库函数不遵循此规则,是否有其他方法/解决方法来组合函数以提高可读性 我将给出一个具体的示例-该函数将输入字符串作为两个参数中的第一个参数,因此将其中两个参数加上一个toUpper链接起来,以创建一个“slugify”函数,我的结论如下: slugify :: FilePath -> FilePath slugify old = let (dir, fil

我理解在Haskell中,重要的是在函数定义中将最“可变”的参数(即输入对象)放在最后,以使函数尽可能可组合()。但是,如果我使用的库函数不遵循此规则,是否有其他方法/解决方法来组合函数以提高可读性

我将给出一个具体的示例-该函数将输入字符串作为两个参数中的第一个参数,因此将其中两个参数加上一个
toUpper
链接起来,以创建一个“slugify”函数,我的结论如下:

slugify :: FilePath -> FilePath
slugify old =
   let (dir, file) = splitFileName old
   in combine dir $ subRegex (mkRegex "[ _]") (subRegex (mkRegex "[^.a-z0-9_ ]+") (map toLower file) "") "-"

有没有一种函数组合风格的方法可以在给定子类参数顺序的情况下进行整理

您始终可以提供一个小助手来将参数顺序更改为更可组合的形式:

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

在简单的情况下,也可以使用或lambda表达式,但在这种情况下,我认为局部定义更好。它还可以轻松地删除对
mkRegex
的重复调用

您始终可以提供一个小助手来将参数顺序更改为更可组合的形式:

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

在简单的情况下,也可以使用或lambda表达式,但在这种情况下,我认为局部定义更好。它还可以轻松地删除对
mkRegex
的重复调用

我不知道它在这里有多大帮助,但该工具有时对这些类型的事情有用。我不知道它在这里有多大帮助,但该工具有时对这些类型的事情有用。
sub=flip。次区域。mkRegex
显然,这里的理想解决方案[1]是对变量使用hackery类型,或者([1]--N.B.实际上不是理想的解决方案)谢谢@hammar,这对我来说太棒了。我将研究
flip
,但是是的,我认为您的解决方案非常适合这个问题。
sub=flip。次区域。mkRegex
显然,这里的理想解决方案[1]是对变量使用hackery类型,或者([1]--N.B.实际上不是理想的解决方案)谢谢@hammar,这对我来说太棒了。我将研究
flip
,但是是的,我认为您的解决方案非常适合这个问题。