ByteArray# as a foreign import argument?

Shao, Cheng cheng.shao at tweag.io
Thu Oct 10 20:09:42 UTC 2019


Yes, and specifically, the lifted ByteArray type as described in the
comments, not the unlifted ByteArray# type.

On Fri, Oct 11, 2019 at 4:00 AM Csaba Hruska <csaba.hruska at gmail.com> wrote:
>
> 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


More information about the ghc-devs mailing list