首页 > 解决方案 > 如何处理 Haskell 中的严格类型检查?

问题描述

我正在尝试在 Haskell 中编写我的第一个程序(它非常简单)来检查给定的数字是否为素数:

prime :: Num n=> n -> Bool
prime x=smz[x `mod` a > 0 | a<-[2..(round(sqrt x))]] where
        smz :: [Bool]->Bool
        smz [] = True
        smz (c:cs)=c && (smz cs)

但我遇到了一堆错误。有人可以给我正确版本的代码(不改变我的想法)

标签: haskell

解决方案


GHC 中的编译错误包含实际描述,也包含在源代码中的位置。一些较新的 ghc 版本还会打印一段代码。此外,错误消息中还添加了其他信息,因此总体上看起来很吓人。但实际错误在第一行。最简单的是类型不匹配,例如“预期这个,得到那个”。在复杂的情况下,您可能必须检查文档、Google 或 SO。

从第一个错误开始通常会更好。有时它们很明显需要修复。有时它们会让你重新考虑你的设计。修复错误后再次编译并选择下一个。继续,直到修复所有错误。

有些人还建议不要先写很多代码,然后编译并得到很多错误,而是尽可能少写,然后编译。这样您在每个步骤中都会遇到更少的错误。


推荐阅读