В качестве примера возьмем следующее
type Row a = [a]
type Table a = [Row a]
mapTable :: (a -> b) -> Table a -> Table b
mapTable = map . map
notTable :: Table Bool -> Table Bool
notTable = map . map $ (not)
Почему, если я удалю $ из notTable, он перестает работать?
Я объяснял себе это несколько раз, но никогда не срабатывает и мне нужно время, чтобы осмыслить происходящее. Я знаю, что $ в основном гарантирует, что каждая сторона $ оценивается отдельно, потому что $ имеет самый низкий приоритет, но почему это ломается, если я вытаскиваю $?
Спасибо