Türleri aynı kategoride olduğu sürece rasgele değerler içerebilen bir haritaya ihtiyacım var. Benim ilk naif yaklaşım böyle bir şeydi:Heterojen harita
type HMap = forall a . MyClass a => M.Map Int a
ama işe görünmüyor: Aşağıdaki kod, bir derleme hatası verir:
testFunction :: (forall a . MyClass a => M.Map Int a) -> Int -> IO()
testFunction m i = do
case M.lookup i m of
Nothing -> return()
Just v -> someActionFromMyClass v >> putStrLn "OK"
Ambiguous type variable `a0' in the constraint:
(MyClass a0) arising from a use of `m'
Probable fix: add a type signature that fixes these type variable(s)
In the second argument of `M.lookup', namely `m'
In the expression: (M.lookup i m)
In a stmt of a 'do' block:
case (M.lookup i m) of {
Nothing -> return()
Just v -> someActionFromMyClass v >> putStrLn "OK" }
Ben özel heterojen koleksiyon gerektiğini düşündü, ama garip Google'da this hariç hiçbir şey bulamadım, ancak bu kitaplık çok kirli ve eski görünüyor. Bunu doğru şekilde yapmanın yolu nedir (umarız diğer kütüphaneler olmadan, sadece GHC uzantılarını kullanarak)?
Çok teşekkür ederim! Kendime sahip olmadığım bir utanç. Sanırım benden daha fazla uyumaya ihtiyacım var. –