
Hi,
On Sun, Dec 21, 2008 at 11:45 AM, Luke Palmer
2008/12/21 Iavor Diatchki
g :: TestClass a => a -> Integer g = fst (a :: (a -> Integer, a -> Integer))
Which I believe needs to be written:
g :: forall a. TestClass a => a -> Integer g = fst (a :: (a -> Integer, a -> Integer))
quite right! sorry for not testing my code. -iavor
Here we are using another GHC extension called "scoped type variables" to associate the "a" in the type signature of "g" with the "a" in the type annotation for the value "a".
Hope that this helps, Iavor
On Sun, Dec 21, 2008 at 9:21 AM, Maurício
wrote: Why isn't the last line of this code allowed? f :: (TestClass a) => a -> Integer f = const 1 a = (f,f) g = fst a The only thing I can think about is monomorphism restriction, but it's allowed (...)
(...) The reason is that a has type a :: (TestClass a, TestClass b) => (a,b) and then when we take 'fst' of this value (as in g) we get
g :: (TestClass a, TestClass b) => a which is an ambiguous type, (...)
Is there some version (i.e., set of extensions) of Haskell where this would be allowed?
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe