Bulat Ziganshin wrote: > Hello Ross, > Thursday, September 21, 2006, 12:55:40 PM, you wrote: >>> data Ex = forall a. Num a => Ex a >>> >>> and >>> >>> data Po = Po (forall a. Num a => a) > >> Consider the types of the constructors: > >> Ex :: forall a. (Num a) => a -> Ex >> Po :: (forall a. (Num a) => a) -> Po > > sorry, Ross, can you give me a more detailed explanation? it seems > that Po argument is existential by itself,
The Po argument is a polymorphic function, not an existential. As I understand it, the constructor Ex _is_ a polymorphic function, whereas the constructor Po (only) _takes_as_argument_ a polymorphic function. In the latter case you store a polymorphic function inside your data, whereas in the former case you construct (monomorphic) data in a polymorphic way, which means that during the process you loose the concrete type of the argument. Ben _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe