Hi!
On Thu, Jan 23, 2003 at 10:28:13AM -0000, Simon Peyton-Jones wrote:
>
> To get around it, define your own data type:
>
> data MyPr = MyPr (forall a.a->a) (forall a.a->a)
>
> swap1 :: MyPr -> MyPr
I played a bit with using highed order polymorphism for this problem,
and have encountered compile errors I don't understand.
The first version doesn't compile - the error is:
Type synonym `F3' should have 1 argument, but has been given 0
In the type: Pair F3 F2
While checking the type signature for `p'
{-# OPTIONS -fglasgow-exts #-}
module T where
type F3 a = a -> a -> a
type F2 a = a -> a
data Pair c1 c2 = Pair (forall a. c1 a) (forall b. c2 b)
swap :: Pair c1 c2 -> Pair c2 c1
swap (Pair f g) = Pair g f
f2 :: F2 a
f2 = id
f3 :: F3 a
f3 = const
p :: Pair F3 F2
p = Pair f3 f2
The other version uses newtype instead of type synonyms for F2 and F3.
This one compiles without problems.
{-# OPTIONS -fglasgow-exts #-}
module T2 where
newtype F3 a = F3 (a -> a -> a)
newtype F2 a = F2 (a -> a)
data Pair c1 c2 = Pair (forall a. c1 a) (forall b. c2 b)
swap :: Pair c1 c2 -> Pair c2 c1
swap (Pair f g) = Pair g f
f2 :: F2 a
f2 = F2 id
f3 :: F3 a
f3 = F3 const
p :: Pair F3 F2
p = Pair f3 f2
There is probably some restriction I don't know about or haven't
recognized in this particular case. I hope you will enlighten me.
> Simon
Best regards,
Tom
--
.signature: Too many levels of symbolic links
_______________________________________________
Glasgow-haskell-bugs mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs