Haskell 操作“中的原始IP地址”;“网络”;以及字节顺序的混乱

Haskell 操作“中的原始IP地址”;“网络”;以及字节顺序的混乱,haskell,networking,ip-address,endianness,Haskell,Networking,Ip Address,Endianness,软件包中的HostAddress和HostAddress 6文档说明: -- | Network byte order. type HostAddress = Word32 -- | Host byte order. type HostAddress6 = (Word32, Word32, Word32, Word32) 这个字节顺序实际上是什么意思?毕竟,Word32应该是一个独立于主机的数字,endianness应该只在(反)序列化它时才起作用 我的目标是提供一个IPv4或IPv6地址来

软件包中的
HostAddress
HostAddress 6
文档说明:

-- | Network byte order.
type HostAddress = Word32

-- | Host byte order.
type HostAddress6 = (Word32, Word32, Word32, Word32)
这个字节顺序实际上是什么意思?毕竟,
Word32
应该是一个独立于主机的数字,endianness应该只在(反)序列化它时才起作用

我的目标是提供一个IPv4或IPv6地址来构造正确的
SockAddr
值。

对于
HostAddress
来说,字节顺序似乎是在小端体系结构上翻转的,因为我
显示$SockAddrInet 0 0x0100007f
给出了
“127.0.0.1:0”
。而且
show$SockAddrInet6 0 0 0(0,0,0,1)0
给出了
“[::1]:0
,所以看起来字节顺序是正确的。但是目前我没有机会在big-endian架构上测试它。

该模块似乎解决了这个问题

看看:


以及创建IPv4和IPv6值的各种方法。

我猜它们是“序列化”格式,就像C函数之后的
htons,htoni,…
会“破坏”从主机端到网络端的位转换。它们应该是
newtype
s,IMO。(此外,我真的不喜欢一个自称为“半公共”的库。内部模块应该是不透明的。)@Petr Pudlák-你能至少就我的答案提供一些反馈吗?谢谢。请注意a的发布,它现在支持链接感谢你。我检查了这个包,它看起来确实不错。我主要担心的是,它是我的库不必要依赖的更大包的一部分。而且我对它的功能有点不满意s用于(反)构造
IPv4
IPv6
,它们使用列表而不是元组(类型安全性较低),但我想这很容易用pull请求解决:)。