Kody wygląda następująco:W Haskell, jak automatycznie wyprowadzić taką niestandardową klasę?
class MyAnd a where
myAnd :: (Show a) => a -> a -> String
x `myAnd` y = (show x) ++ " and " ++ (show y)
data TrafficLight = Red | Yellow | Green deriving(Show, MyAnd)
MyAnd
Tutaj jest klasa typ, który posiada funkcję myAnd
, myślałem, że jest nazwą rodzajową i jedynym ograniczeniem jest a
musi posiada instancję Show
klasy ..
W typie TrafficLight
pochodzi już z klasy typu Show
. Jednak gdy skompilowałem kody, kompilator narzeka
Can't make a derived instance of ‘MyAnd TrafficLight’:
‘MyAnd’ is not a derivable class
In the data declaration for ‘TrafficLight’
Failed, modules loaded: none.
Czy ktoś ma pomysły na ten temat?
To prawda, kompilator nie wie, jakie metody powinny wykonać. Ale może warto dodać do tego język, żeby to powiedzieć. Powiązane: http://stackoverflow.com/a/3864801/524504 – masterxilo