ジェネリックベクターインターフェイスを使用するときに型シグネチャを定義する際に問題があります。ボックス化されていないベクトルとボックス化されていないベクトルの両方で動作するメソッドを構築したいと思います。Data.Vector.Genericインターフェイスの使用
これは動作しますが、箱入りのベクトルに拘束されています
import Control.Monad.ST
import Data.Vector as V
import Data.Vector.Generic as VG
import Data.Vector.Generic.Mutable as VGM
import Data.Vector.Mutable as VM
import Data.Vector.Unboxed as VU
import Data.Vector.Unboxed.Mutable as VUM
mySwap :: V.Vector a -> V.Vector a
mySwap vec = runST $ do
vec_mut <- V.thaw vec
VM.swap vec_mut 0 1
V.unsafeFreeze vec_mut
私は一般的なインタフェースを使用するためにはVG
にV
を変更する場合、2つの引数は型シグネチャにベクトルのために必要とされているが、私「最初の引数制約するかどうかはよく分からない:タイプ予想
mySwap2 :: VG.Vector v a -> VG.Vector v a
mySwap2 vec = runST $ do
vec_mut <- VG.thaw vec
VGM.swap vec_mut 0 1
VG.unsafeFreeze vec_mut
を、しかし
VG.Vector v a
は親切 を持っていますGeneric
モジュールにおいて
これは非常に便利なトリックです。 – tsorn
GHCをあなたの友人にさせてください。また、[部分型署名](https://ghc.haskell.org/trac/ghc/wiki/PartialTypeSignatures)を参照して、GHCで型署名のどの部分を指定するかを教えてください。 – ErikR