Standarize GHC.Prim.Any

Maciej Piechotka uzytkownik2 at gmail.com
Thu Aug 20 13:59:41 EDT 2009


Sorry for delay in responding.

> > Any from GHC.Prim makes unsafeCoerce much useful and safe. Can it be
> > included in Unsafe.Coerce module?
> > 
> > Pros:
> > - unsafeCoerce is much more useful with Any (it's a safe placeholder for
> > any value and therefore can be passed simply in/out FFI).
> 
> Yes it's a safe placeholder, but so is an existential, I believe...
> data ContainsAny = forall a. ContainsAny a
> to put in the container:
> "ContainsAny x"
> to remove from the container:
> "case ... of ContainsAny x -> unsafeCoerce x"
> Albeit, there might be a slight performance penalty for the extra box, 
> which can't be removed in all haskell implementations.
> 
> Also, what do you mean about "FFI"?  I don't think you can pass the 
> "Any" type to foreign functions through the FFI...
> 
> Also, can/do all compilers that implement unsafeCoerce implement a safe Any?
> Hugs can do it with just "data Any = Ignored" I believe, not sure about 
> nhc, yhc or jhc...
> 
> -Isaac

Well. May be I have one specific problem which seems to not be possible
to be implemented in portable way (I'm not sure if it is possible
outside ghc). Sorry for mentioning FFI without further explanation.

The problem arise if one would like to implement GClosure from glib.
Once it was implemented in gtk2hs in C using RTS API. I also have my own
implementation in Haskell which is doing something (removed IO monad for
clarity):
applyValue :: Any -> Value -> Any
applyValue f v =
	case funsamentalTypeOf v of
		Type1 -> (unsafeCoerce f :: HaskellType1 -> Any) $ get v
		...

Such trick is (looks for me?) safe as a -> b -> ... -> d can be
represented by Any. However I cannot safely cast to function a -> Any.

To/from FFI it is passed in Ptr (StablePtr Any).

Regards
PS. I assume that it is not possible as it was done in importable was in
gtk2hs. 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part
Url : http://www.haskell.org/pipermail/haskell-prime/attachments/20090820/7e580612/attachment.bin


More information about the Haskell-prime mailing list