我只是想知道$的工作原理:我期待

> (flip (+).digitToInt) $ '4' 4

<interactive>:1:24:
    Couldn't match expected type `t -> Char'
           against inferred type `Char'
    In the second argument of `($)', namely '4' 4
    In the expression: (flip (+) . digitToInt) $ '4' 4
    In the definition of `it': it = (flip (+) . digitToInt) $ '4' 4

(flip (+).digitToInt)应用于4 4,但是没有用。怎么会?我发现这个有效
>  (flip (+).digitToInt) '4' 4
8
it :: Int

而且,我看到以下类型:
>  :t (flip (+).digitToInt)
(flip (+).digitToInt) :: Char -> Int -> Int

但是,我不明白为什么我不能调用显式应用(flip (+).digitToInt)
这种困惑来自以下基本观察:







允许具有相同的效果-除了顶部的线路噪声稍微多一点。

最佳答案

(flip (+).digitToInt) $ '4' 4

是相同的
(flip (+).digitToInt) $ ('4' 4)

哪一个当然不起作用,因为'4'不是函数。

要获得所需的行为,您可以执行
(flip (+).digitToInt $ '4') 4

要不就
(flip (+).digitToInt) '4' 4

10-04 12:54