{-# LANGUAGE ScopedTypeVariables #-}

-- | Read instance for unboxed vectors.

module Data.Vector.Unboxed.Read where

import qualified Data.Vector.Unboxed as VU
import qualified Text.Read.Lex as L
import GHC.Show
import Text.Read
import Text.ParserCombinators.ReadP

instance (VU.Unbox a, Read a) => Read (VU.Vector a) where
  readPrec =
    parens $ do
        L.Ident "fromList" <- lexP
        (vals :: [a])  <- readPrec
        lift $ skipSpaces
        lift $ string "::"
        lift $ skipSpaces
        lift $ string "Data.Vector.Unboxed.Vector"
        return $ VU.fromList vals
  readListPrec = readListPrecDefault
  readList     = readListDefault