qforeign-0.62

Manuel M. T. Chakravarty chak at cse.unsw.edu.au
Fri Dec 1 03:32:52 EST 2000


qrczak at knm.org.pl (Marcin 'Qrczak' Kowalczyk) wrote,

> Fri, 01 Dec 2000 13:10:43 +1100, Manuel M. T. Chakravarty <chak at cse.unsw.edu.au> pisze:
> 
> > Instead of the 
> > 
> >   newtype Window = Window ForeignObj
> > 
> > way of wrapping foreign ADTs that we used so far, should we
> > use
> > 
> >   newtype WindowTag = WindowTag ()
> >   type    Window    = ForeignObj WindowTag
> > 
> > ?
> 
> This exposes the fact that Window is a ForeignObj. Ok, but maybe some
> people want it to be more abstract - clients need not to know that
> it's just a ForeignObj. Such type is usually exported.

I don't want to exclude that you write

  newtype WindowTag = WindowTag ()
  newtype Window    = ForeignObj WindowTag

That's fine, too.  It would still make 

  withForeignPtr :: ForeignObj a -> (Ptr a -> IO b) -> IO b

nicer, because it constrains the parameter of `Ptr'.

> BTW, IMHO it's more natural to write
>     data WindowTag = WindowTag
> and it would be yet more natural (and would avoid ghc's warning about
> a constructor which is never used) if we were allowed to write
>     data WindowTag
> to create a void type.

I agree, but that would be an extension to Haskell and so is
not an option right now.  We have to work with what we got.

Cheers,
Manuel




More information about the FFI mailing list