我很难让编译器相信我的类型是正确的。Nat对于带有Zero和构造函数的常规\n 来说,Succ这非常简单(目标是replicate为长度索引列表编写函数(Vect ) 编写函数):
replicate' :: SNat n -> a -> Vect n a\nreplicate' SZero _ = Nil\nreplicate' (SSucc n) a = a :> replicate' n a\nRun Code Online (Sandbox Code Playgroud)\n\n但经常Nat非常慢。
因此,在单例库中有一个镜像 GHC.TypeLits 的包,以实现更快的 Nats。\n但我无法使上面的示例与它一起使用:
\n\nsameNat :: forall a b. (KnownNat a, KnownNat b) => SNat a -> SNat b -> Maybe (a :~: b)\nsameNat x y\n | natVal (Proxy :: Proxy a) == natVal (Proxy :: Proxy …Run Code Online (Sandbox Code Playgroud)