[Haskell-cafe] Re: Existencial quantification and polymorphic datatypes (actually, components...)

Jonathan Cast jonathanccast at fastmail.fm
Wed Jan 21 15:00:32 EST 2009


On Wed, 2009-01-21 at 13:38 -0600, Jake McArthur wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> 
> Gleb Alexeyev wrote:
> | Mauricio wrote:
> |
> |> data SomeNum = SN (forall a. a)
> |
> | [...]
> |
> | you cannot do anything to the value you extract
> 
> Maybe. Say you construct (SN x). If you later extract x, you can observe
> that it terminates (using seq, perhaps), assuming that it does
> terminate.

The definition you quoted is equivalent to

data SomeNum where
  SN :: (forall a. a) -> SomeNum

So if I say

  case y of
    SN x -> ...

Then in the sequel (...) I can use x at whatever type I want --- it's
polymorphic --- but whatever type I use it at, it cannot terminate.

I think you meant to quote the definition

data SomeNum = forall a. SN a

which is equivalent to

data SomeNum where
  SN :: forall a. a -> SomeNum

in which case if I say

  case y of
    SN x -> ...

then x is a perfectly monomorphic value, whose type happens to be a
(fresh) constant distinct from all other types in the program.  So I
can't do anything useful with x, although as you say, it can be forced
with seq.  OTOH, you could do exactly the same thing with a normal
judgment of type (), if you found a use for it.

jcc




More information about the Haskell-Cafe mailing list