使用 Data.Vector.Unboxed.Deriving 派生 Unbox 实例时出现 GHC 7.10.2 警告

GHC 7.10.2 warning when deriving Unbox instance using Data.Vector.Unboxed.Deriving

以下程序:

{-# LANGUAGE TemplateHaskell, RankNTypes, MultiParamTypeClasses, TypeFamilies #-}

import Data.Vector.Unboxed
import Data.Vector.Unboxed.Deriving
import Data.Word

data Pixel a = Pixel a deriving Show

derivingUnbox "Pixel"
    [t| forall a . (Unbox a) => Pixel a -> a |]
    [| \ (Pixel a) -> a |]
    [| \ a -> (Pixel a) |]

main = print $ Pixel 0

使用模板 haskell 为 Pixel 派生 Unbox 实例。它适用于 GHC 7.8,但在 7.10.2 上,我收到以下警告:

/Users/v/haskell/Tests/pix.hs:11:1: Warning:
    No explicit implementation for
      ‘Data.Vector.Generic.Mutable.Base.basicInitialize’
    In the instance declaration for
      ‘Data.Vector.Generic.Mutable.Base.MVector MVector (Pixel a_a6Ue)’

这是什么意思?

自从 basicInitialize 添加到 Data.Vector.Generic.Mutable.Base.MVector class 以来,提供您正在使用的模板的 vector-th-unboxed 包尚未更新。 您应该 file an issue to get the macro fixed, and you may wish to You should contact a Hackage trustee 查看如何同时调整 vector-th-unbox 的依赖范围。为 vector 的最新版本编写的代码可能会使用 basicInitialize(直接或间接);当使用 Point 调用该函数时,它将引发运行时错误。

有一个 pull request 开放解决这个问题,但维护者没有接受它。不妨自己复习一下,在当地应用一下。