Мне просто интересно, как $
работает: я ожидал
> (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
Но я не понимаю, почему я не могу вызвать apply (flip (+).digitToInt)
явно
Эта путаница проистекает из основного наблюдения, что
digitToInt $ '5'
и
digitToInt '5'
разрешено с тем же эффектом - за исключением того, что на вершине чуть больше линейного шума.