*Main> :type fromList fromList :: (Ord k) => [(k, a)] -> Map k a *Main> :type new new :: (New a b) => a -> b The type of new probably accounts for the difference (even though it still makes me wonder what the big deal is :) Using functional dependencies seems to fix it, i.e.: class New a b | a -> b where new :: a -> b or, perhaps more appropriately: class New a b | b -> a where new :: a -> b Cheers, D. Tenev On 5/27/05, Mirko Rahn <rahn@ira.uka.de> wrote:
Hi all,
an explicit given signature causes ghc to choose the right types for integer literals as in
{-# OPTIONS -fglasgow-exts #-}
import Data.Map
f :: Ord a => [a] -> Map a Int f xs = fromList $ zip xs [0..]
Here the Literal 0 is threated as (0::Int).
But the setting
{-# OPTIONS -fglasgow-exts #-}
import Data.Map
class New a b where new :: a -> b
instance Ord a => New [(a,b)] (Map a b) where new = fromList
g :: Ord a => [a] -> Map a Int g xs = new $ zip xs [0..]
causes the error message
Could not deduce (New [(a, b)] (Map a Int)) from the context (Ord a) arising from use of `new' at Why.hs:10:7-9
ghc seems to be unable to threat the Literal 0 as (0::Int) this time but I do not understand why :-(
Can anyone explain it?
Thanks,
-- -- Mirko Rahn -- Tel +49-721 608 7504 -- --- http://liinwww.ira.uka.de/~rahn/ --- _______________________________________________ Glasgow-haskell-users mailing list Glasgow-haskell-users@haskell.org http://www.haskell.org/mailman/listinfo/glasgow-haskell-users