You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用realToFrac仍报Int类型错误 Massiv数组元组Int转Double问题

错误原因
  1. forPrimM的映射函数签名为e -> m e,要求输入输出元素类型完全一致,仅支持同类型数组的原地修改,无法改变数组的元素类型。
  2. 你从func12获取的可变数组tarr固定为(Int,Int,Int,Int)类型,即使传入返回Double四元组的映射函数,也无法改变原数组的类型约束,最终unsafeFreeze得到的仍为Int四元组数组,与func13声明的Double四元组返回类型不匹配,因此触发编译错误。
修复方案
  • 推荐方案:先冻结得到不可变Int数组,再映射转换为Double类型后计算得到目标数组,代码示例:
func13 :: Data.Massiv.Core.Array U Ix1 (Double,Double,Double,Double)
func13 = runST $ do
  tarr <- func12
  intArr <- Data.Massiv.Array.Unsafe.unsafeFreeze Par tarr
  pure $ compute $ fmap (\x -> 
    ( realToFrac (sel1 x) / 100
    , realToFrac (sel2 x) / 100
    , realToFrac (sel3 x) / 100
    , realToFrac (sel4 x) / 100
    )) intArr
  • 可选方案:新建对应长度的Double类型可变数组,将转换后的元素逐个写入新数组,再冻结新数组返回,适合需要手动控制内存操作的场景。

内容的提问来源于stack exchange,提问作者Anon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 12:42:03