我正在寻找一种方法return从以下函数中删除s:
naming path =
getModificationTime path >>=
return . formatTime defaultTimeLocale "%Y%m%d" >>=
return . printf "%s_%s" (takeBaseName path) >>=
return . replaceBaseName path
Run Code Online (Sandbox Code Playgroud)
我之所以这样构造它的原因是因为它>>=本质上变成了一种管道操作符,并且数据从一行流向下一行.
我想我可以沿着这条线定义一个算子
a |>= b = (return a) >>= b
Run Code Online (Sandbox Code Playgroud)
得到
naming path =
getModificationTime path >>=
formatTime defaultTimeLocale "%Y%m%d" |>=
printf "%s_%s" (takeBaseName path) |>=
replaceBaseName path
Run Code Online (Sandbox Code Playgroud)
但我得到了错误
Precedence parsing error
cannot mix `|>=' [infixl 9] and `.' [infixr 9] in the same infix expression
Run Code Online (Sandbox Code Playgroud)
解决此问题的最佳方法是什么?更好的是,是否有某种标准的运算符或其他方式可以更容易地以这种方式构造代码?
haskell ×1