(->)当我查阅有关(->)ghci的信息时,我非常感兴趣.它说,
data (->) a b -- Defined in `GHC.Prim`
Run Code Online (Sandbox Code Playgroud)
到目前为止一切都那么好,但是当它说 - 时它变得非常有趣 -
instance Monad ((->) r) -- Defined in `GHC.Base`
instance Functor ((->) r) -- Defined in `GHC.Base`
Run Code Online (Sandbox Code Playgroud)
这意味着什么?为什么GHC将它定义为Monad和Functor的实例(->)?
这是我正在考虑的一个示例问题:取每个x从1到n的总和,其中x可以被3或5整除,所以像这样:
divisible a b = rem b a == 0
sum3or5 n = sum [x | x <- [1..n], divisible 3 x || divisible 5 x]
Run Code Online (Sandbox Code Playgroud)
来自Scheme,我想使用过滤器实现这一点,如下所示:
divisible a b = rem b a == 0
sum3or5 n = sum $ filter div3or5 [1..n] where
div3or5 n = (divides 3 n) || (divides 5 n)
Run Code Online (Sandbox Code Playgroud)
我在想,是否有一个更高阶的逻辑OR(||),所以我可以写'div3or5'无点样式,这样的东西?:
divisible a b = rem a b == 0
sum3or5 = sum $ filter (divisible 3 || divisible 5) . range
Run Code Online (Sandbox Code Playgroud)
谢谢您的帮助.
haskell ×2