我有一个函数组合,其中许多是运算符,用于将常量提高到常量的幂减去列表中第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
的工作原理。怎么了?为什么组合不起作用但应用程序有效?另外,用括号编写运算符是最惯用的方法吗?这感觉很奇怪。
答案 0 :(得分:2)
而不是f . g . h x
,而不是f . g . h $ x
:前者立即调用h x
,然后使用f
将作为函数组成和g
后者将f
,g
和h
组合成一个新函数,然后在i
上调用它。
答案 1 :(得分:0)
请注意,您可以使用括号对函数组合进行分组,
((k^).(n-).size.(phi !!)) i
应该有用。