gpt4 book ai didi

Haskell:如何测试未编译的代码?

转载 作者:行者123 更新时间:2023-12-04 16:52:41 24 4
gpt4 key购买 nike

测试声明类型不正确的最佳方法是什么?使用 GADT,确定构造函数应用程序正确与否并非易事。如果一个人正在编写一个类型安全构造的库,那么确保不能创建非法构造是很自然的。因此,作为测试套件的一部分,我想确保类型检查器拒绝某些示例非法构造。

例如,请参阅大小检查向量表示。它比我想决定的典型问题简单得多,但它是检查测试方法的一个很好的例子。

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)

最佳答案

您可以从 Haskell 程序中调用 GHCi 并使用它来检查字符串。 hint from hackage 为此提供了一个方便的包装器:

{-# LANGUAGE DataKinds, TypeOperators, GADTs #-}

import GHC.TypeLits
import Language.Haskell.Interpreter

data Vector n t where
EmptyVec :: Vector 0 t
ConsVec :: t -> Vector n t -> Vector (n + 1) t

main = do
print =<< runInterpreter (typeChecks "ConsVec 'c' (ConsVec \"b\" EmptyVec)")
-- prints "Right False"

当然,这只是编写用于检查文本文件的脚本的一种更方便的替代方法,但我相信没有一种方法可以在 Haskell 中反射(reflect)类型检查本身,所以这就是我们所拥有的。

关于Haskell:如何测试未编译的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25929349/

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