我只是想知道$
的工作原理:我期待
> (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