作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想构建一个备用的 Winery 模式解码器。所以我查看了一些编码模式:
*Codec.Winery> B.unpack $ serialiseSchema $ schema (Proxy :: Proxy Void)
[4,5,0]
*Codec.Winery> B.unpack $ serialiseSchema $ schema (Proxy :: Proxy Bool)
[4,6]
*Codec.Winery> B.unpack $ serialiseSchema $ schema (Proxy :: Proxy Int)
[4,16]
*Codec.Winery> B.unpack $ serialiseSchema $ schema (Proxy :: Proxy Integer)
[4,16]
*Codec.Winery> B.unpack $ serialiseSchema $ schema (Proxy :: Proxy Void)
[4,5,0]
*Codec.Winery> B.unpack $ serialiseSchema $ schema (Proxy :: Proxy ())
[4,3,0]
我知道第一个数字是架构版本。我知道 Int 可以被编码为一个整数,因为它更小。但是其他人呢?
bookstrapSchema
中提到的类型的索引进行比较。但他们似乎不匹配。
最佳答案
它们匹配,但有些需要争论。忽略版本号 4
, 编码 [5,0]
表示 SVariant
零替代,基本上是没有构造函数的和类型,AKA Void
:
data Void
另一方面
[3,0]
表示
SProduct
具有零字段,即具有单个空构造函数的类型,AKA
()
:
data () = ()
我建议查看除这些“退化”类型之外的 sum 和 product 类型,并研究
pretty
的输出- 将模式与其序列化一起打印:
import Codec.Winery
import qualified Data.ByteString as B
import Data.Proxy
import Prettyprinter
main = do
let s = schema (Proxy :: Proxy (Either Int String))
print $ B.unpack . serialiseSchema $ s
print $ pretty s
这里的编码和 pretty-print 模式是:
[4,5,2,4,76,101,102,116,3,1,16,5,82,105,103,104,116,3,1,2,7]
Left Integer | Right [Char]
意思是:
[4 -- version 4
,5,2 -- SVariant with 2 alternatives, namely:
,4,76,101,102,116 -- 4-character constructor "Left" for
,3,1 -- SProduct with 1 field
,16 -- consisting of an SInteger
,5,82,105,103,104,116 -- 5-character constructor "Right" for
,3,1 -- SProduct with 1 field
,2 -- consisting of an SVector
,7] -- of SChar
关于haskell - 酿酒厂类型在哪里索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65856745/
我是一名优秀的程序员,十分优秀!