【发布时间】:2019-03-27 10:23:05
【问题描述】:
我很想了解包 arithmoi (https://hackage.haskell.org/package/arithmoi-0.8.0.0) 中幻象类型的使用。它有助于检查我是否使用了正确的残基类 (Z/nZ)。
有问题的幻象类型是data Mod (n :: Nat) = Mod Natural,据我了解,构造函数没有导出。但是SomeMod的构造函数是导出的,所以我想我必须用它来构造::Mod n变量。
而且,可以看文档,但是我不能用。
case modulo n m of
SomeMod k -> process k -- Here k has type Mod m
InfMod{} -> error "impossible"
所以我尝试了:
foo :: KnownNat m => Nat -> Nat -> Mod m
foo n m = case modulo n m of
(SomeMod k) -> k
otherwise -> error "some error"
我收到一个关于变量 m 的错误,m1 正在逃逸其范围。我有点疑惑。
【问题讨论】:
-
您可能还喜欢Statically enforcing that two objects were created from the same (Int) “seed”。在阅读问题(以及我的答案)时,当您看到“种子”时,请考虑“模数”;当你看到
Collection时,想Mod;当您看到“合并集合”时,请考虑“加法”或“乘法”或类似的操作,这些操作仅在两个参数的模数相等时才有效。
标签: haskell phantom-types