Jeff Polakow wrote:
However, I don't see
how they are not equivalent (in the presence of impredicative polymorphism) since I can write
derivations for both

    forall b. (b -> String /\ Int)  |-  (forall b. b -> String) /\ Int

and

    (forall b. b -> String) /\ Int  |-  forall b. (b -> String /\ Int)

in intuitionistic logic.

(Side-stepping your main point, rather, which I think Chris K answered correctly)

This is a non-sequitur.

The fact that A |- B and B |- A does not make them the same type. It makes them isomorphic types.

I can prove

(A \/ B) /\ C -| |- (A /\ C) \/ (B /\ C)

but that doesn't mean "(Either a b,c)" and "Either (a,c) (b,c)" are the same haskell type.

It does mean they are isomorphic types, neglecting bottoms.

But isomorphic types are not the same type, for the type checker!

Jules



_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

Reply via email to