什么是测试声明不正确类型的最佳方法?使用GADTs时,很难确定构造函数应用程序是否正确。如果有人正在编写一组类型安全构造函数库,则自然要确保无法创建非法构造函数。因此,在测试套件的一部分中,我希望确保一些示例非法构造函数被类型检查器拒绝。
例如,可以看到一个经过大小检查的向量表示。它比我想要解决的典型问题简单得多,但这是一个检查测试方法的好例子。
例如,可以看到一个经过大小检查的向量表示。它比我想要解决的典型问题简单得多,但这是一个检查测试方法的好例子。
data Vector n t where
EmptyVec :: Vector 0 t
ConsVec :: t -> Vector n t -> Vector (n+1) t
// TODO: test that it does not typecheck
illegalVec = ConsVec 'c' (ConsVec "b" EmptyVec)
TypeOperators
,GADTs
,DataKinds
以及GHC.TypeLits
的导入。 - András Kovács