Haskell函数链

时间:2015-12-30 02:21:26

标签: haskell

我有一个函数组合,其中许多是运算符,用于将常量提高到常量的幂减去列表中第i个集的大小。这是我的代码:

(k^).(n-).size.(phi !!) i

当我在测试用例上尝试时,我得到了

<interactive>:64:16-25:
    Couldn't match expected type ‘a -> Set a0’
                with actual type ‘Set a1’
    Relevant bindings include
      it :: a -> c (bound at <interactive>:64:1)
    Possible cause: ‘phi !!’ is applied to too many arguments
    In the second argument of ‘(.)’, namely ‘(phi !!) 3’
    In the second argument of ‘(.)’, namely ‘size . (phi !!) 3’

然而,

(k^)$(n-)$size$(phi !!)$i

的工作原理。怎么了?为什么组合不起作用但应用程序有效?另外,用括号编写运算符是最惯用的方法吗?这感觉很奇怪。

2 个答案:

答案 0 :(得分:2)

而不是f . g . h x,而不是f . g . h $ x:前者立即调用h x,然后使用f作为函数组成和g后者将fgh组合成一个新函数,然后在i上调用它。

答案 1 :(得分:0)

请注意,您可以使用括号对函数组合进行分组, ((k^).(n-).size.(phi !!)) i应该有用。