Haskell:重载问题:解释器无法判断使用哪个+

Ben*_*Ben 2 haskell overloading

我想使函数Double - > Double一个Num类型类的实例.我想将两个函数的总和定义为它们的图像的总和.所以我写了

instance Num Function where

f + g = (\ x -> (f x) + (g x))
Run Code Online (Sandbox Code Playgroud)

在这里,编译器抱怨他无法判断我是否在lambda表达式中使用了Prelude.+或Module.+.所以我导入了Prelude qual作为P并写了

instance Num Function where

f + g = (\ x -> (f x) P.+ (g x))
Run Code Online (Sandbox Code Playgroud)

这编译得很好,但是当我尝试在GHCi中添加两个函数时,解释器再次抱怨他无法判断我是否正在使用Prelude.+Module.+.有什么办法可以解决这个问题吗?

C. *_*ann 7

编译器抱怨是因为您正在定义一个名为的函数+,而不是+为类实例定义一个实现.你忘了缩进函数定义吗?你想要这样的东西:

instance Num (Double -> Double) where
    f + g = (\ x -> (f x) + (g x))
Run Code Online (Sandbox Code Playgroud)

不是这样的:

instance Num (Double -> Double) where

f + g = (\ x -> (f x) + (g x))
Run Code Online (Sandbox Code Playgroud)

也就是说,Num函数类型的实例由于各种原因实际上并不能正常工作,最重要的是,Num实例也需要也是实例,Eq并且实际上都不能以合理Show的方式定义函数.