例如,类的Haskell方法不可见

我正在尝试定义一个类“多边形”以及子类型“三角形”和“四元组”。这些应该实现多边形的面积功能。

所以我尝试创建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.

您能给我一个解决办法的提示吗?谢谢!

xiongyong3036 回答:例如,类的Haskell方法不可见

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

class Polygon a where
    area :: a -> Float

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

本文链接:https://www.f2er.com/3129500.html

大家都在问