任何人都翻转(< $>)

时间:2009-11-05 03:12:21

标签: haskell functional-programming pointfree

我找到了以下

的定义
(%)  = flip fmap

我可以编写如下代码:

readFile "/etc/passwd" % lines % filter (not . null)
对我来说,它比替代

更有意义
filter (not . null) <$> lines <$> readFile "/etc/passwd"

显然这只是一个秩序问题,是否有其他人这样做?是否有正当理由不写这样的代码?

5 个答案:

答案 0 :(得分:8)

您的运营商(%)正是运营商(<&>) from the lens package

可以导入:

import Control.Lens.Operators ((<&>))

答案 1 :(得分:5)

Applicative类型类似<**>的类似函数;想要或使用Functor也是一件非常合理的事情。遗憾的是,<**>的语义略有不同,因此无法直接扩展以适用于Functor

答案 2 :(得分:4)

-- (.) is to (<$>) as flip (.) is to your (%).  

我通常定义(&amp;)= flip(。),就像你的例子一样,你可以应用函数组合后缀。在我看来,可以更容易理解无点代码。

答案 3 :(得分:2)

我个人不会使用这样的操作符,因为那时我必须学习两个读取程序的命令。

答案 4 :(得分:1)

(<&>) :: 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-