[MLton] Callback to function pointer?
Stephen Weeks
MLton@mlton.org
Fri, 15 Jul 2005 15:30:49 -0700
> I think the currying is very useful here, because the common scenario is
> what appears in examples/ff/iimport.sml:
>
> local
> val double_to_double =
> _import * : DynLink.fptr -> real -> real;
> val sin_fptr = DynLink.dlsym (hndl, "sin")
> val cos_fptr = DynLink.dlsym (hndl, "cos")
> val tan_fptr = DynLink.dlsym (hndl, "tan")
> in
> val sin = double_to_double sin_fptr
> val cos = double_to_double cos_fptr
> val tan = double_to_double tan_fptr
> end
I don't disagree, but I will point out that even in this case
uncurried isn't so bad.
local
val double_to_double =
fn sym => fn r => _import * : DynLink.fptr * real -> real; (sym, r)
val sin_fptr = DynLink.dlsym (hndl, "sin")
val cos_fptr = DynLink.dlsym (hndl, "cos")
val tan_fptr = DynLink.dlsym (hndl, "tan")
in
val sin = double_to_double sin_fptr
val cos = double_to_double cos_fptr
val tan = double_to_double tan_fptr
end
It just goes along with my principle that currying is a fine shorthand
when used locally (I do it all the time), but should only be exposed
in an interface when there is staged computation.
> > Stephen proposed:
> >
> > _symbol "symbol": cbTy; (unit -> cbTy) * (cbTy -> unit)
> > _symbol *: ptrTy, cbTy; (ptrTy -> cbTy) * (ptrTy * cbTy -> unit)
>
> My vote is for this proposal.
OK. I'm happy enough. Hopefully Wesley and others don't find it too
bad.
> > One thing I don't like about any of the proposals is having to write
> > the pointer type, since it is almost always MLton.Pointer.t.
>
> I disagree. DynLib would like to use an opaque DynLib.fptr.
True.