当我尝试通过以下方式将Int作为类Gueltig的实例时:
instance Gueltig Int where
ist_gueltig (Int a) = Ja
,为什么会出现错误消息“未定义的数据构造函数“ Int””? 如何制作Int实例?
感谢您的帮助!
答案 0 :(得分:9)
这里没有什么可以进行模式匹配的。您不必在乎整数的 value ,而只是在是一个整数。编译器甚至在选择之前就已经证明了这一点。所以,只要做到
instance Gültig Int where
istGültig _ = Ja
或者,您也可以编写istGültig a = Ja
,但是未使用的变量不应具有名称(实际上,-Wall
会触发警告)。
OTOH,Int a
仅在具有像
这样的数据类型时才有效
data Int = Int {intData :: ???}
如果事实为Int
does kind of look like this,但这是GHC实施细节:
data {-# CTYPE "HsInt" #-} Int = I# Int#
在这里,#Int
是一种硬机器表示形式。这是未提升的类型,这意味着它的行为在某些方面与标准Haskell值不同。除非您真的知道原因,否则您不想处理这个问题。
通常,您应该将Int
视为无法进一步解包的抽象类型。只需直接将其与标准数字/比较运算符一起使用即可。