Haskell 为什么可以';我做(翻转(+;).digitToInt)$';4';4.
我只是想知道Haskell 为什么可以';我做(翻转(+;).digitToInt)$';4';4.,haskell,syntax,Haskell,Syntax,我只是想知道$是如何工作的:我期待着 > (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 (+
$
是如何工作的:我期待着
> (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
而且,我看到了以下类型:
> :t (flip (+).digitToInt)
(flip (+).digitToInt) :: Char -> Int -> Int
但是,我不明白为什么我不能显式地调用apply(flip(+).digitToInt)
这种混乱来自于一个基本的观察,即
DigitPoint$'5'
及
数字点'5'
允许具有相同的效果-除了顶部有稍多的线噪声
(flip (+).digitToInt) $ '4' 4
与
(flip (+).digitToInt) $ ('4' 4)
这当然不起作用,因为'4'
不是一个函数
为了得到你想要的行为,你可以
(flip (+).digitToInt $ '4') 4
或者只是
(flip (+).digitToInt) '4' 4
为什么呢?即使这样也不起作用(
(flip(+).digitToInt)$'4'$4
,我希望它能显式地显示咖喱效果。事实上,这可能是有意义的:这是有效的(((flip(+).digitToInt)$'4')$4
@Evan:因为$的优先级较低,并且是右关联的foo$bar$baz
被解析为foo$(bar$baz)
,因此您仍在尝试应用'4'
,就好像它是一个函数一样。如果您需要这些参数/和/$
,您可能做错了什么。
(flip (+).digitToInt) '4' 4