Simon Peyton-Jones wrote:
> | Are there workarounds for uses of impredicative types, or do we lose the
> | ability to express certain programs as a result?
> 
> There's usually a workaround.  I include the msg I sent below.

I tried to use impredicative polymorphism once to create polymorphic
values inside a monad, similar to the following (silly) example

    foo :: IO (∀a. a -> a)
    foo = do
        ref <- newIORef id    -- ref :: IO (∀a. a -> a)
        readIORef ref

(Fortunately, it turned out that this was not what I needed anyway.)


Generally, it seems to me that all polymorphically typed EDSLs require
impredicative polymorphism. After all, they are usually embedded with
some kind of functor  F  (= Expr, IO, Parser, ...) and polymorphically
typed means that you want types like

   F (∀a. a :~> a)

and so on.

Of course, we don't have (m)any examples of polymorphically typed DSLs
yet, but it would be handy to have support for impredicativity in GHC
if someone stumbles upon a useful one.


Regards,
apfelmus

--
http://apfelmus.nfshost.com

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to