子类关系和一个类的方法可以使用其他类型类的方法实现的事实之间有什么关系?Haskell子类的说明
例如,它是相当混乱给我定义Applicative
像class Functor a => Applicative a
为强迫你加入一个Functor
实例,然后才能添加Applicative
之一,然而,你可以写一个实例声明一样instance Applicative a => Functor a
,将确保每一个Applicative
也是Functor
。
这个方法背后的原因是什么?而且,正如我所说,如果超类可以使用子类实例化,是否一个规则是一个类型类是另一个类的超类?
我会说这不是一个规则。 'class Num a =>小数a'',但不能用'Fractional'的少数几个方法来定义'+'(在'Num'中)。话虽如此,如果我们能写出例如一个'实例Monad'并具有'Applicative,Functor'自动定义而不需要样板代码。或者,更好的是,用一些通用的机制把它们交给任意的类层次结构。 – chi