Haskell mongodb:将二进制值转换回ByteString

时间:2013-07-19 13:56:19

标签: mongodb haskell

这是我看不到的简单而愚蠢的事情。

如果定义了新类型:

newtype Binary

Constructors
Binary ByteString

Instances:
Eq Binary    
Ord Binary   
Read Binary  
Show Binary  
Typeable Binary  
Val Binary

如何解构二进制值以获取ByteString?

如果我想将二进制数据保存到mongodb中,比如jpg图片,我可以从文件系统中读取ByteString中的Val二进制类型。然后我将其插入文档中。

当我从数据库中读回数据并将其从文档中删除时,我最终得到了二进制类型,我很不满意。我无法将ByteString类型恢复为与ByteString.writeFile一起使用。

因此,跳过所有连接内容的流程如下:

file <- B.readFile "pic.jpg" -- reading file
let doc = ["file" =: (Binary file)] -- constructing a document to be inserted
run $ insert_ "files" doc -- insert the document
r <- run $ fetch (select [] "files") -- get Either Failure Document back from db
let d = either (error . show) (id ) r -- Get the Document out
let f  = at "file" d :: Binary -- Get the data out of the document of type Binary

谢谢。

1 个答案:

答案 0 :(得分:4)

假设您的newtype看起来像这样,

newtype Binary = Binary ByteString

然后你可以简单地在构造函数上进行模式匹配,以获得ByteString

unBinary :: Binary -> ByteString
unBinary (Binary s) = s