Hi all,

Let's say I have the following two data types:

{-# OPTIONS_GHC -fglasgow-exts #-}

module RankNVsExists where

data RankN  = RankNEq (forall a. Eq a => a -> a -> Bool)
            | RankNOrd (forall a. Ord a => a -> a -> Bool)

data Exists = forall a. Eq a => ExistsEq (a -> a -> Bool)
            | forall a. Ord a => ExistsOrd (a -> a -> Bool)

So, the RankN type uses rank-2 polymorphism to "hide" the expression inside the type, whereas the Exists type uses existentially quantified types instead. The two seem pretty equivalent to me, since the data constructors have the same type. However, I can't help but feel that I'm missing something fundamental about a difference between them. Are the two completely isomorphic? Is there some advantage or disadvantage to using one over the other?



-- % Andre Pang : trust.in.love.to.save <http://www.algorithm.com.au/>

_______________________________________________
Haskell mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell

Reply via email to