zep*_*pal 2 haskell class declaration
我正在遵循教程并找到了这段代码:
data A = B | C deriving(Eq)
class K a where
f :: a -> Bool
instance K A where
f x = x == C
f _ = False
call = f B
Run Code Online (Sandbox Code Playgroud)
为什么我需要f _ = False?没有它我得到相同的结果。
答案很简单:你不需要这里f _ = False。事实上,如果您使用-Wallthen 进行编译,编译器会警告您该子句是多余的,因为该f x = ...子句已经捕获了所有内容。
如果教程告诉你要有这个额外的子句,那么,这是错误的。
正如所指出的,这是没有必要的。
不过,如果您的定义略有不同,并且不需要实例,您可能需要(或想要)该行Eq:
data A = B | C
class K a where
f :: a -> Bool
instance K A where
f C = True
f _ = False
Run Code Online (Sandbox Code Playgroud)
您可以直接将参数与 进行比较x,然后定义以返回所有其他值,而不是与 进行比较。如果有更多的构造函数可以生成.CCfFalseFalse
data A' = B | C | D
instance K A' where
f C = True
f _ = False -- in place of f B = False and f D = False
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
160 次 |
| 最近记录: |