这是我看不到的简单而愚蠢的事情。
如果定义了新类型:
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
谢谢。
答案 0 :(得分:4)
假设您的newtype
看起来像这样,
newtype Binary = Binary ByteString
然后你可以简单地在构造函数上进行模式匹配,以获得ByteString
:
unBinary :: Binary -> ByteString
unBinary (Binary s) = s