In article
<[EMAIL PROTECTED]
ft.com>,
"Simon Peyton-Jones" <[EMAIL PROTECTED]> wrote:
> Here's a less complicated variant of the same problem:
>
> class C a b | a -> b where {}
>
> instance C Int Int where {}
>
> f :: (C Int b) => Int -> b
> f x = x
>
> Is the defn of f legal? Both GHC and Hugs reject it because the
> inferred type of f is more like
> C Int Int => Int -> Int
If this were allowed, it would effectively allow type-lambda. For
instance, I have a type function T that maps Int to Bool and Bool to
Char:
class C a b | a -> b
instance C Int Bool
instance C Bool Char
newtype T a = MkT (forall b.(C a b) => b)
helperIn :: (forall b.(C a b) => b) -> T a
helperIn b = MkT b; -- currently won't work
helperOut :: T a -> (forall b.(C a b) => b)
helperOut (MkT b) = b;
Here T is a type-constructor that does that. If I like, I can represent
Char as "T (T Int)", though of course I need to use the helper functions
to actually use it as a Char.
--
Ashley Yakeley, Seattle WA
_______________________________________________
Haskell mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell