为什么在Haskell中处理而不是网络的任何类型?

L01*_*man 3 networking haskell types

通过网络发送和接收的数据类型是String或Bytestring.我们不能发送任何其他类型,例如Int,或[Bool]因为一切都通过了Handle.我知道我们可以解析它,即使使用它,read但我认为它不漂亮,也不可靠,也没有效果.

为什么选择这个?是因为它在技术上"不可能",否则,或者因为Network延迟或其他原因只是对C库的绑定?

Sno*_*all 8

通过网络传输的数据只是一个字节流.您可以在任一端点为该字节流分配含义,但在网络上它没有任何意义.据我所知,每种语言都是如此,有些人只是选择在标准库中抽象出来.

您可以使用二进制谷物等包(使用encodedecode函数)对您发送的数据进行编码/解码.双方都用自己的序列化类(的实例BinarySerialize,分别)为许多标准类型,如Int,Double,Bool,和[].

  • 问题是,您需要决定如何将数据类型表示为字节流 - 没有单一的标准或明显的方法来实现它.将本机dataypes转换为字节串称为序列化:您的数据表示约定由您使用的序列化包确定. (5认同)