[EMAIL PROTECTED] (Marcin 'Qrczak' Kowalczyk) wrote,
> Fri, 01 Dec 2000 13:10:43 +1100, Manuel M. T. Chakravarty <[EMAIL PROTECTED]>
>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
_______________________________________________
FFI mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/ffi