pgvector-0.1.0: src/Pgvector.hs
{-# LANGUAGE OverloadedStrings #-}
module Pgvector (Vector (..)) where
import qualified Data.ByteString.Char8 as BS
import Database.PostgreSQL.Simple.FromField
import Database.PostgreSQL.Simple.ToField
data Vector = Vector [Float] deriving (Show)
instance ToField Vector where
toField = toField . encodeVector
instance FromField Vector where
fromField f mdat = do
typ <- typename f
if typ /= "vector"
then returnError Incompatible f ""
else case mdat of
Nothing -> returnError UnexpectedNull f ""
Just dat -> return $! decodeVector (BS.unpack dat)
encodeVector :: Vector -> String
encodeVector (Vector v) = show v
decodeVector :: String -> Vector
decodeVector v = Vector (read v)