在随机-fu包中,有一个data声明:
data Multinomial p a where
Multinomial :: [p] -> a -> Multinomial p [a]我知道这是一个GADT,但它想要实现什么呢?它是否对p或a等设置了限制?
发布于 2014-08-13 23:46:27
它更改构造函数的返回类型。如果它是这样定义的
data Multinomial p a = Multinomial [p] a构造函数将具有以下类型
Multinomial :: [p] -> a -> Multinomial p aGADT将构造函数结果类型中的第二个类型参数更改为[a]。
发布于 2014-08-14 05:37:09
至于“为什么”,Distribution类型类将rvar定义为
class Distribution d t where
rvar :: d t -> RVar t因此,给定分布的类型参数决定了从RVar中获得的样本的类型。因此,使用GADT,Multinomial发行版被定义为始终每个样本返回多个值的发行版,即使它是用单个a值构造的。
https://stackoverflow.com/questions/25297824
复制相似问题