如何在Unison中从标准输入读取内容及Text类型数据?
在Unison中读取标准输入及Text类型数据
基础读取操作
Unison的标准库base提供了直接操作标准输入的IO函数,核心都在Text.IO模块下——因为Unison中默认的字符串类型就是Text,所以读取标准输入的操作直接返回Text类型结果:
读取单行输入
使用Text.IO.getLine函数,它会读取标准输入的一行内容(直到换行符),返回IO Text类型:
-- 读取一行输入并打印输出 demoReadLine : IO () demoReadLine = do inputLine <- Text.IO.getLine Text.IO.printLine ("你输入的单行内容: " ++ inputLine) -- 运行示例 > run demoReadLine
读取全部输入
如果需要一次性读取标准输入的所有内容(比如处理文件重定向输入),可以用Text.IO.readAll,它会读取到输入流结束,返回IO Text类型:
-- 读取全部输入并打印内容长度 demoReadAll : IO () demoReadAll = do allContent <- Text.IO.readAll let contentLength = Nat.toText (Text.length allContent) Text.IO.printLine ("输入内容总长度: " ++ contentLength) -- 运行示例 > run demoReadAll
读取单个字符
如果需要逐字符读取输入,可用Text.IO.getChar,它返回IO (Maybe Char)——当输入流结束时会返回Nothing:
-- 逐字符读取直到输入结束 demoReadChars : IO () demoReadChars = loop where loop = do maybeChar <- Text.IO.getChar case maybeChar of Nothing -> Text.IO.printLine "\n输入结束" Just c -> do Text.IO.print (Text.singleton c) loop -- 运行示例 > run demoReadChars
关于Text类型的读取说明
Unison中Text是原生的UTF-8编码字符串类型,上述所有标准输入读取函数返回的都是Text,不需要额外的类型转换。如果需要处理二进制输入(非文本数据),则需要使用Blob.IO模块的相关函数,但这不属于Text类型的范畴。
内容的提问来源于stack exchange,提问作者bbarker
相关产品推荐
相关产品推荐

