[Haskell-beginners] qtHaskell, ForeignPtr
Daniel Fischer
daniel.is.fischer at web.de
Mon Sep 7 18:36:00 EDT 2009
Am Montag 07 September 2009 23:54:17 schrieb Michael Mossey:
> I'm trying to learn qtHaskell, an interface to the Qt GUI library. I am
> fairly new to Haskell, but have used Qt for a long time, so I thought I
> could probably reasonably attempt to grok qtHaskell at this point.
>
> My main question is: anyone recommended a good explanation of the foreign
> function or foreign pointer interface?
>
> My immediate question is that I was poking through the Qtc docs, and saw
> this:
>
>
> Documentation
>
> data Object a
>
> Constructors
>
> QObject !(ForeignPtr a)
>
> I am not sure how Haddock works. Is this telling me that an Object
> constructor takes one argument, which is of type QObject, where QObject is
> a type constructor that takes !(ForeignPtr a)? Or is this saying it takes
> two arguments, a QObject and a !(ForeignPtr a). That latter makes more
> sense I guess. What does the ! mean?
It tells you that the (Object a) datatype has a data-constructor called QObject (I know
you already figured that out) which takes one argument of type (ForeignPtr a).
However, the constructor's argument type has a bang (!), which means that the constructor
is strict in its argument.
For nonstrict constructors (data Ob a = Con a), you can happily create a value
Con _|_
which will be a nice and harmless citizen until you try to look at its contents. For
example,
let x = Con undefined in x `seq` 3
returns 3, only
let x = Con undefined in
case x of
Con y -> y `seq` 3
will raise an exception.
If you make your constructor strict (data Thing a = SCon !a), it doesn't accept a bottom,
the strict constructor evaluates its argument to weak head normal form, if it encounters a
bottom, an exception is raised.
So,
Con _|_ /= _|_
but
SCon _|_ == _|_
>
> Thanks,
> Mike
More information about the Beginners
mailing list