我发现定义以下
(%) = flip fmap
我可以这样写代码:
readFile "/etc/passwd" % lines % filter (not . null)
对我来说,它比替代方案更有意义:
filter (not . null) <$> lines <$> readFile "/etc/passwd"
显然,这只是顺序问题。
还有其他人这样做吗?有正当理由不写这样的代码吗?
我发现定义以下
(%) = flip fmap
我可以这样写代码:
readFile "/etc/passwd" % lines % filter (not . null)
对我来说,它比替代方案更有意义:
filter (not . null) <$> lines <$> readFile "/etc/passwd"
显然,这只是顺序问题。
还有其他人这样做吗?有正当理由不写这样的代码吗?
(<&>) :: Functor f => f a -> (a -> b) -> f b
现在可从Data.Functor
. base
https://hackage.haskell.org/package/base-4.12.0.0/docs/Data-Functor.html#v:-60--38--62-
Applicative
类型类有一个类似的函数,称为<**>
; 想要或使用 Functor 也是一件非常合理的事情。不幸的是,语义有点不同<**>
,因此也不能直接扩展以适用于Functor
。
-- (.) is to (<$>) as flip (.) is to your (%).
我通常定义 (&) = flip (.) 就像你的例子一样,你可以应用函数组合反词。在我看来,允许更容易理解无积分代码。
就我个人而言,我不会使用这样的运算符,因为那样我必须学习两个阅读程序的顺序。