例如,Haskell class 的方法不可见

Haskell methode of class is not visible for instance

我正在尝试定义 class "Polygon" 和子类型 "Triangle" 和 "Quad"。那些应该实现多边形的面积功能。

所以我尝试创建一个 Polygon 的实例,但这不起作用。

class Polygon a where

area :: a -> Float

data Triangle = MkTriangle {
                        tP1 :: Point,
                        tP2 :: Point,
                        tP3 :: Point}
                        deriving(Show)

data Quad = MkQuad{
                    qP1 :: Point,
                    qP2 :: Point,
                    qP3 :: Point,
                    qP4 :: Point}
                    deriving(Show)

instance Polygon Triangle where
    area triangle = 5.0

请注意area triangle = 5.0只是调试而不是真正的功能。 试图编译这个,我收到以下错误:

    `area' is not a (visible) method of class `Polygon'
   |
57 |         area triangle = 5
   |         ^^^^
Failed, no modules loaded.

你能给我一个提示来解决这个问题吗?谢谢!

您需要缩进 area 方法,使其在 Polygon class 的范围内,例如:

class Polygon a where
    area :: a -> Float

通过使用相同的缩进级别定义它,您定义了一个空类型class,并创建了一个没有绑定的函数签名area