我這樣做在GHCI如下:Haskell模糊發生 - 如何避免?
:m + Data.Map
let map = fromList [(1, 2)]
lookup 1 map
GHCI知道地圖是(地圖整數整數)。那麼爲什麼它聲明Prelude.lookup和Data.Map.lookup之間的類型是明確的,我能避免嗎?
<interactive>:1:0:
Ambiguous occurrence `lookup'
It could refer to either `Prelude.lookup', imported from Prelude
or `Data.Map.lookup', imported from Data.Map
> :t map
map :: Map Integer Integer
> :t Prelude.lookup
Prelude.lookup :: (Eq a) => a -> [(a, b)] -> Maybe b
> :t Data.Map.lookup
Data.Map.lookup :: (Ord k) => k -> Map k a -> Maybe a
這是我尋求的答案,+1。但我還有一個問題。那麼爲什麼所有這些'Data.List','Data.Set'等都沒有「容器」類型類?或者如果有(如果我理解正確,這是'Functor'類型類型) - 那麼,爲什麼爲容器類型定義它的實例並不是在庫中無處不在? – ulidtko 2012-02-15 03:33:16
@ulidtko:簡短的回答是「因爲它比聽起來更難」,而長的回答不適合評論。什麼容器支持什麼操作和對元素類型的限制有很多複雜性,&c。查找'TypeFamilies'擴展的信息 - 容器API是一個激勵的例子。 – 2012-02-15 16:02:58
@ulidtko這可能對你很有趣:http://hackage.haskell.org/packages/archive/classy-prelude/0.4.1/doc/html/ClassyPrelude.html – 2012-12-07 07:55:20