Below are examples of using the sub-class context at class level and at instance level.
In this simple case they seem to give the same results
In general, are there certain situations in which one or the other is preferred?
Pat
module CLASS where
-- class and sub-class
class Class a where
foo :: a -> a
foo a = a
class Class a => SubClass a where
moo :: a -> a
moo a = foo a
instance Class Integer where
instance SubClass Integer where
*CLASS> :t foo 2
foo 2 :: forall t. (Class t, Num t) => t
*CLASS> :t moo 2
moo 2 :: forall t. (SubClass t, Num t) => t
module INSTANCE where
-- Using context at instance level
-- Is
class Class a where
foo :: a -> a
foo a = a
class SubClass a where
moo :: a -> a
instance Class Integer where
instance Class Integer => SubClass Integer where
moo a = foo a
INSTANCE> :t foo 2
foo 2 :: forall t. (Class t, Num t) => t
INSTANCE> :t moo 2
moo 2 :: forall t. (SubClass t, Num t) => t