ByteArray# as a foreign import argument?

Csaba Hruska csaba.hruska at gmail.com
Thu Oct 10 20:00:01 UTC 2019


Sorry, maybe I got it wrong. Are you asking if is there any package that
passes ByteArrays via FFI?

On Thu, Oct 10, 2019 at 8:54 PM Csaba Hruska <csaba.hruska at gmail.com> wrote:

> 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/7460c372/attachment.html>


More information about the ghc-devs mailing list