gpt4 book ai didi

haskell - 酿酒厂类型在哪里索引?

转载 作者:行者123 更新时间:2023-12-04 08:13:03 25 4
gpt4 key购买 nike

我想构建一个备用的 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/

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