gpt4 book ai didi

sml - 在标准 ML 中将 TextIO 流转换为 BinIO 流

转载 作者:行者123 更新时间:2023-12-01 01:54:37 27 4
gpt4 key购买 nike

在标准 ML 中,我有一个写入 BinIO.outstream 的函数。我希望它写入标准输出。

TextIO结构有 stdOutTextIO.outstream类型,BinIO没有这样的变量,TexIO.outstreamBinIO.outstream 不兼容:

- f;
val it = fn : BinIO.outstream -> unit
- TextIO.stdOut;
val it = - : TextIO.outstream
- f TextIO.stdOut;
stdIn:6.1-6.16 Error: operator and operand don't agree [tycon mismatch]
operator domain: BinIO.outstream
operand: TextIO.outstream
in expression:
f TextIO.stdOut

现在最简单的转换方法是什么 TextIO.outstream进入 BinIO.outstream ?即如何实现 ???以下?
- f (??? TextIO.stdOut);

更新:

对于那些感兴趣的人,这里是根据 Andreas 的回答的实现:
fun textWriterToBinWriter (TextPrimIO.WR { name,
chunkSize,
writeVec,
writeArr,
writeVecNB,
writeArrNB,
block,
canOutput,
getPos,
setPos,
endPos,
verifyPos,
close,
ioDesc }) =
let
fun convertWriteVec textWriteVec =
textWriteVec o CharVectorSlice.full o Byte.unpackStringVec
fun convertWriteArr textWriteArr =
textWriteArr o CharArraySlice.full o CharArray.fromList o explode o Byte.unpackString
in
BinPrimIO.WR {
name = name,
chunkSize = chunkSize,
writeVec = Option.map convertWriteVec writeVec,
writeArr = Option.map convertWriteArr writeArr,
writeVecNB = Option.map convertWriteVec writeVecNB,
writeArrNB = Option.map convertWriteArr writeArrNB,
block = block,
canOutput = canOutput,
getPos = getPos,
setPos = setPos,
endPos = endPos,
verifyPos = verifyPos,
close = close,
ioDesc = ioDesc }
end

fun textStreamToBinStream' textStream =
let
val (textWriter, bufferMode) = TextIO.StreamIO.getWriter textStream
in
BinIO.StreamIO.mkOutstream (textWriterToBinWriter textWriter, bufferMode)
end

fun textStreamToBinStream textStream =
let
val textStream' = TextIO.getOutstream textStream
in
BinIO.mkOutstream (textStreamToBinStream' textStream')
end

最佳答案

原则上应该可以写一个TextIO.outstream到BinIO.outstream的转换函数(反之亦然),但是虽然比较机械,但需要做一些工作。你需要实现:

  • 使用 Byte结构,转换函数TextPrimIO.writer -> BinPrimIO.writer
  • 使用它,转换函数 TextIO.StreamIO.outstream -> BinIO.StreamIO.outstream
  • 使用它,转换函数 TextIO.outstream -> BinIO.outstream

  • 但是,我怀疑是否建议进行这样的转换。特别是,操作系统接口(interface)和工具通常假定 stdout和 friend 实际上是文本流。

    如果您只需要编写一个 Word8 向量,那么预先将其转换为字符串就足够了,例如使用 Byte结构体。

    关于sml - 在标准 ML 中将 TextIO 流转换为 BinIO 流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41548892/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com