packages feed

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)