我的代码有效.我只想知道是否可以在使用默认实现之前在实例声明中添加一些内容,而不是必须复制代码.一个例子:
class (Eq a, Ord a, Show a, Num a) => Fibo a where
fib :: a -> a
fib n
| n == 0 = 0
| n == 1 = 1
| otherwise = fib (n-1) + fib (n-2)
instance Fibo Integer where
fib n
| n < 0 = -1
| n == 0 = 0
| n == 1 = 1
| otherwise = fib (n-1) + fib (n-2)
Run Code Online (Sandbox Code Playgroud)
但它是否也可以用我不必重新实现整个功能的方式编写?就像是:
instance Fibo Integer where
fib n
| n < 0 = -1
| otherwise = default
Run Code Online (Sandbox Code Playgroud)
或者,如果没有在两个地方使用相同的代码,还有其他方法吗?
解决方案不是要更改默认实现!
只需将公共代码放入辅助函数:
foo::(Eq a, Ord a, Show a, Num a) =>a -> a
foo n
| n == 0 = 0
| n == 1 = 1
| otherwise = foo (n-1) + foo (n-2)
class (Eq a, Ord a, Show a, Num a) => Fibo a where
fib :: a -> a
fib = foo
instance Fibo Integer where
fib n
| n < 0 = -1
| otherwise = foo n
Run Code Online (Sandbox Code Playgroud)