haskell中的点运算符

时间:2014-07-17 10:46:40

标签: haskell operators dot-operator

我有一个使用Dot-operator的函数。现在我想写没有点。我怎么能这样做?

all p = and . map p

这是对的吗?

all p = and (map p)

我收到这些错误:

4.hs:8:13:
    Couldn't match expected type `[Bool]'
                with actual type `[a0] -> [b0]'
    In the return type of a call of `map'
    Probable cause: `map' is applied to too few arguments
    In the first argument of `and', namely `(map p)'
    In the expression: and (map p)

2 个答案:

答案 0 :(得分:14)

查看(.)的{​​{3}}:

f . g  =  \ x -> f (g x)

扩展此功能

and . (map p)  =  \x -> and ((map p) x)

all p x  =  and (map p x)

答案 1 :(得分:4)

删除(.)需要明确添加点是通过函数“线程化”的参数。你想要像

这样的东西
all p xs = and (map p xs)