0

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

如果定义了新类型:

newtype Binary

Constructors
Binary ByteString

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

如何解构 Binary 值以取回 ByteString?

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

当我从数据库中读回数据并将其从文档中取出时,我最终得到了 Binary 类型,而且我很坚持。我无法恢复 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

谢谢你。

4

1 回答 1

4

假设你newtype看起来像这样,

newtype Binary = Binary ByteString

然后您可以简单地在构造函数上进行模式匹配以获取结果ByteString

unBinary :: Binary -> ByteString
unBinary (Binary s) = s
于 2013-07-19T14:01:41.013 回答