Почему GHCi странно набирает этот оператор ?

Отвечая на вопрос о stackoverflow, я заметил, что GHCi (интерактивный) присваивает слишком-ограничительный тип в операторе let . А именно, учитывая код,

import Control.Arrow
f = maximum &&& id >>> fst &&& (\(m,l) -> length $ filter (==m) l)

(как и в моем ответе на 6283594 ), если вставить «let» перед f и ввести это в ghci, он даст следующую информацию о типе

Prelude Control.Arrow> :t f
f :: [()] -> ((), Int)

, тогда как простой запрос типа выражения дает правильный результат, а именно Ord a => [a] -> (a, Int) . Я использую ghc 7.0.3.

9
задан Community 23 May 2017 в 10:33
поделиться