Vector の Binary インスタンスを作成しようとしています。
import qualified Data.Vector as V
import qualified Data.Vector.Mutable as MV
import Data.Binary
instance (Binary a) => Binary (V.Vector a) where
put = vput
get = vget
実装は次のとおりです。最初に長さを出力し、次にすべてのデータポイントを出力します
vput v = (put (V.length v)) >> (put `V.mapM_` v)
問題はvget
. 使用したいと思いますV.create
(非常に大きなベクトルを出力することを計画していますが、セマンティクスは非常に適しているようです。
これが私の試みです:
vget :: (Binary a) => Get (V.Vector a)
vget = do
size <- get
vec <- liftM V.create $ do
v <- (liftM MV.new) size
forM_ [0..(size-1)] $ \i -> do
val <- get
(liftM3 MV.write) v i val
return v -- This is line 22
return vec
エラーは
SerializeVector.hs:22:16:
Couldn't match expected type `forall s. ST s (MV.MVector s a0)'
with actual type `Get a10'
私はこれを推論し、ランダムに s を挿入しようとしましliftM
たが、役に立ちませんでした。