【发布时间】:2011-06-08 18:48:29
【问题描述】:
在回答有关 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 之前插入一个“let”并将其输入到ghci 中,它会提供以下类型信息
Prelude Control.Arrow> :t f
f :: [()] -> ((), Int)
而仅仅询问表达式的类型会给出正确的结果,即Ord a => [a] -> (a, Int)。我正在使用 ghc 7.0.3。
【问题讨论】: