例如,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
。
我正在尝试定义 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
。