在回答有关 stackoverflow 的问题时,我注意到 GHCi(交互式)在let语句中分配了一个过于严格的类型。即,给定代码,
import Control.Arrow
f = maximum &&& id >>> fst &&& (\(m,l) -> length $ filter (==m) l)
(如我对https://stackoverflow.com/questions/6281813/maximum-of-list-and-count-of-repeat-maximum-number/6283594#6283594的回答),如果一个人在之前f
和在 ghci 中输入 this,它会给出以下类型信息
Prelude Control.Arrow> :t f
f :: [()] -> ((), Int)
而仅仅询问表达式的类型会给出正确的结果,即Ord a => [a] -> (a, Int)
. 我正在使用 ghc 7.0.3。