ByteArray# as a foreign import argument?
Csaba Hruska
csaba.hruska at gmail.com
Thu Oct 10 19:54:44 UTC 2019
It's a primitive type.
https://gitlab.haskell.org/ghc/ghc/blob/master/compiler/prelude/primops.txt.pp#L1388
https://gitlab.haskell.org/ghc/ghc/wikis/commentary/prim-ops
Cheers,
Csaba
On Thu, Oct 10, 2019 at 8:16 PM Shao, Cheng <cheng.shao at tweag.io> wrote:
> Hello devs,
>
> I've been trying to figure out how to pass lifted types as foreign
> types, then encountered the following code in the `DsCCall` module
> (
> https://gitlab.haskell.org/ghc/ghc/blob/master/compiler/deSugar/DsCCall.hs#L172
> ):
>
> ```
> -- Byte-arrays, both mutable and otherwise; hack warning
> -- We're looking for values of type ByteArray, MutableByteArray
> -- data ByteArray ix = ByteArray ix ix ByteArray#
> -- data MutableByteArray s ix = MutableByteArray ix ix
> (MutableByteArray# s)
> | is_product_type &&
> data_con_arity == 3 &&
> isJust maybe_arg3_tycon &&
> (arg3_tycon == byteArrayPrimTyCon ||
> arg3_tycon == mutableByteArrayPrimTyCon)
> = do case_bndr <- newSysLocalDs arg_ty
> vars@[_l_var, _r_var, arr_cts_var] <- newSysLocalsDs
> data_con_arg_tys
> return (Var arr_cts_var,
> \ body -> Case arg case_bndr (exprType body) [(DataAlt
> data_con,vars,body)]
> )
> ```
>
> It seems we allow a "ByteArray" type as a foreign import argument, if
> the third field of the datacon is a ByteArray# or MutableByteArray#.
> But I can't find such a ByteArray type definition in today's common
> packages. What's the rationale for this piece of code?
>
> Cheers,
> Cheng
> _______________________________________________
> ghc-devs mailing list
> ghc-devs at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-devs/attachments/20191010/a1d5ac52/attachment.html>
More information about the ghc-devs
mailing list