Ben GHCi içinde aşağıdakileri yapın:Haskell Belirsiz Geçişler - nasıl önlenir?
:m + Data.Map
let map = fromList [(1, 2)]
lookup 1 map
GHCI O haritayı bilen bir (Harita Tamsayı Tamsayı). Öyleyse, neden net olduğunda Prelude.lookup ve Data.Map.lookup arasında bir belirsizlik olduğunu ve neden önlenebilir?
<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
Aradığım cevap bu, +1. Ama bir sorum var. Neden, tüm bu 'Data.List',' Data.Set' vb. Ya da varsa (ve eğer doğru bir şekilde anlarsam, bu 'Functor' tipinde bir yazım hatasıdır) - o zaman, örneklerini konteyner türleri için tanımlama neden kütüphanelerde her yerde bulunmuyor? – ulidtko
@ulidtko: Kısa cevap “çünkü kulağa çok daha zor geliyor” ve uzun cevap bir yoruma uymuyordu. Konteynırların hangi tip işlemleri desteklediğine ve eleman tipleri üzerinde hangi sınırlamalara sahip olduğuna dair pek çok karışıklık vardır, & c. 'TypeFamilies' uzantısıyla ilgili bilgilere bakın - container API'leri bunun için motive edici bir örnektir. –
@ulidtko Bu sizin için ilginç olabilir: http://hackage.haskell.org/packages/archive/classy-prelude/0.4.1/doc/html/ClassyPrelude.html –