翻转/反转 fmap (<$>)?
我发现定义以下内容
(%) = flip fmap
我可以编写这样的代码:
readFile "/etc/passwd" % lines % filter (not . null)
对我来说,它比替代方案更有意义:
filter (not . null) <$> lines <$> readFile "/etc/passwd"
显然,这只是一个顺序问题。
还有其他人这样做吗?有充分的理由不编写这样的代码吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
现在可从
base
中的Data.Functor
获取。https ://hackage.haskell.org/package/base-4.12.0.0/docs/Data-Functor.html#v:-60--38--62-
Now available from
Data.Functor
inbase
.https://hackage.haskell.org/package/base-4.12.0.0/docs/Data-Functor.html#v:-60--38--62-
您的运算符
(%)
正是运算符(<&>)
来自镜头包装。它可以通过以下方式导入:
Your operator
(%)
is exactly the operator(<&>)
from the lens package.It can be imported with:
Applicative
类型类有一个类似的函数,名为<**>
;对于 Functor 来说,想要或使用它也是完全合理的。不幸的是,<**>
的语义有点不同,因此它不能直接扩展以适用于Functor
。There is a similar function for the
Applicative
type class called<**>
; it's a perfectly reasonable thing to want or use for Functor as well. Unfortunately, the semantics are a bit different for<**>
, so it can't be directly widened to apply toFunctor
as well.我通常定义 (&) = Flip (.) ,就像你的例子一样,你可以应用函数组合后缀。在我看来,可以更容易地理解无点代码。
I usually define (&) = flip (.) and it's just like your example, you can apply function composition backwords. Allows for easier to understand points-free code in my opinion.
就我个人而言,我不会使用这样的运算符,因为那样我必须学习两种读取程序的顺序。
Personally I wouldn't use such an operators because then I have to learn two orders in which to read programs.