Haskell 有人能解释这个错误吗?

Haskell 有人能解释这个错误吗?,haskell,syntax,Haskell,Syntax,我是Haskell的新手,正在努力解决一些微妙的语法问题。为什么这样好: reduceBy a f n | n < 2 = (a,f) | (a `mod` n) == 0 = reduceBy( floor $ fromIntegral a / fromIntegral n) (f++[n]) n | otherwise = (a, f) 虽然存在错误:无法将预期的类型“a,[a]”与推断的类型“[a]->a->a,[a]”匹配 reduceB

我是Haskell的新手,正在努力解决一些微妙的语法问题。为什么这样好:

reduceBy a f n
    | n < 2 = (a,f)
    | (a `mod` n) == 0 = 
        reduceBy( floor $ fromIntegral a / fromIntegral n) (f++[n]) n
    | otherwise = (a, f)
虽然存在错误:无法将预期的类型“a,[a]”与推断的类型“[a]->a->a,[a]”匹配

reduceBy a f n
    | n < 2 = (a,f)    
    | (a `mod` n) == 0 = 
        reduceBy( floor(fromIntegral a / fromIntegral n) (f++[n]) n )    
    | otherwise = (a, f)

您的新结束括号来得太晚了。应该是

... reduceBy (floor(fromIntegral a / fromIntegral n)) ...

美元的约束力相当弱,但括号胜过一切。

reduceBy floor$from integral a/from integral n f++[n]n等同于reduceBy floor from integral a/from integral n f++[n]n。正如第一条评论所示,作为一种风格,每当您需要将参数插入括号时,通常不会将开括号放在函数的正后方,而是放在参数的开头,例如,reduceBy floor。。。而不是地板上的减速器。地板$fromIntegral a/fromIntegral n可以写为'div'n