Haskell-使Int成为我的课程的实例

时间:2018-11-14 09:57:56

标签: haskell

当我尝试通过以下方式将Int作为类Gueltig的实例时:

instance Gueltig Int where
    ist_gueltig (Int a) = Ja

,为什么会出现错误消息“未定义的数据构造函数“ Int””? 如何制作Int实例?

感谢您的帮助!

1 个答案:

答案 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视为无法进一步解包的抽象类型。只需直接将其与标准数字/比较运算符一起使用即可。