要求在代码中定义的特定Haskell类型无效



是否可以指示GHC编译器要求代码中的特定值具有无效类型,而不使用该值?

一个人为的例子是:

data Box a = Num a => Box a
goodBoxSample :: Box Int
goodBoxSample = Box 1
-- below definition and binding are expected to fail compilation
badBoxSample :: Box String
badBoxSample = Box "foo"

是否有一种方法可以通知编译器badBoxSample预计会失败(例如,使用一些pragma,而不是将其注释为已知的坏样本(,以便在badBoxSample未能进行类型检查时,代码仅编译

这里的动机与用抛出异常以使测试用例通过所需的代码编写测试(用其他语言(的动机相同

不可能。你基本上是在寻求一种方法来证明不存在instance Num String,但Haskell是在开放世界假设下运行的,这意味着有人总是可以声明这样的实例。

有人在这里发布了一个非常有用的答案,但在我接受它之前,它被删除了。。。无论如何,谢谢你,这里是参考:

https://hackage.haskell.org/package/generic-lens-2.0.0.0/docs/Data-Generics-Product-Fields.html

简而言之,测试失败类型的目标可以通过doctest来实现,就像链接库所做的那样

最新更新