Załóżmy, żeHaskell styl i typeclass projekt (powinny być zminimalizowane typeclasses?)
class A a where
m1 :: a -> a
m2 :: a -> a
m3 :: a -> a
...
gdzie to jest możliwe napisanie domyślną implementację dla M2 i M3 za pomocą M1.
Czy lepiej jest zostawić m2
i m3
w A lub zapisać je jako dodatkowe funkcje na zewnątrz A? m2 :: A a => a -> a
Innymi słowy, warto zminimalizować interfejs API klasy czy ma to znaczenie?
sprawdziłem (szybko) kilka przewodników stylu, jak programmin guidelines a niektóre z linków w large-scale design -question, a niektóre książki (rzemieślnicze & RWH), ale nie mógł znaleźć zalecenie do tego. Jeśli istnieją prezentacje, blogi lub książki poświęcone tego rodzaju problemom, czy możesz podzielić się wskazówkami?
wątek listy adresów e-mail type class design omawia to i może podkreślać minimalizację.
Czy twoja klasa ma jakieś prawa dotyczące zachowania 'm2' i' m3'? Rozważmy "mconcat", który ma domyślną wartość, którą można przesłonić, ale oczekuje się, że będzie równoznaczny z powtarzającą się aplikacją 'mappend'. – chepner
Co do tego, czy można zastąpić wartość domyślną, jeśli jest to tylko zewnętrznie zdefiniowana funkcja? – chepner
W moim przypadku tak, robię: Gram z "sparametryzowaną równością", a pytanie w pewnym sensie dotyczy również klas Eq i ord. Myślę, że jest to wygodne, jeśli możesz wybrać, jaką metodę pisać, podczas tworzenia instancji. Ale co z min & max? – Gspia