[Haskell-cafe] Re: Is this related to monomorphism restriction?
lrpalmer at gmail.com
Sun Dec 21 14:45:12 EST 2008
2008/12/21 Iavor Diatchki <iavor.diatchki at gmail.com>
> 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))
> 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,
> On Sun, Dec 21, 2008 at 9:21 AM, Maurício <briqueabraque at yahoo.com>
> >>> 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 at haskell.org
> > http://www.haskell.org/mailman/listinfo/haskell-cafe
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Haskell-Cafe