Mam pewne trudności, aby zrozumieć, kiedy użycie i kiedy nie używać typeclass w moim kodzie. Mam na myśli tworzenie własnych, a nie używać już zdefiniowanych typeclasses, oczywiście. Przez przykład (bardzo głupi przykład), należy zrobić:Czy powinienem używać czcionek typograficznych?
data Cars = Brakes | Wheels | Engine
data Computers = Processor | RAM | HardDrive
class Repairable a where
is_reparaible :: a -> Bool
instance Repairable Cars where
is_repairable (Brakes) = True
is_repairable (Wheels) = False
is_repairable (Engine) = False
instance Repairable Computers where
is_repairable (Processor) = False
is_repairable (RAM) = False
is_repairable (HardDrive) = True
checkState :: (Reparaible a) => a -> ...
checkState a = ...
(Oczywiście, jest to głupie, niekompletne przykład).
Ale to dużo dla małego użytku, nie? Dlaczego nie powinienem robić czegoś prostego i tylko definiować funkcje bez definiowania nowych typów danych i typów liter (wraz z ich instancjami).
Ten przykład jest zbyt prosty, ale w rzeczywistości często widzę coś takiego (nowe typy danych + typografia + instancje), gdy przeglądam kod Haskella na github zamiast tylko definiowania funkcji.
Kiedy należy tworzyć nowe typy danych, typy znaków itp. I kiedy należy korzystać z funkcji?
Dzięki.
Tak! To bardzo wyczerpująca odpowiedź, dziękuję bardzo! Twoje "nie używaj lekcji typu, jeśli ..." będzie szczególnie pomocne w wyborze dobrego sposobu na zrobienie czegoś. – vildric
Dodałbym do tego "nie używaj czcionek tylko dla jednej metody", chociaż nie jest to absolutnie sztywna reguła, bardziej jak ogólna wskazówka. – MathematicalOrchid
@MathematicalOrchid Jest to część zasady "potrzeb praw", ponieważ rzadko będziesz mieć prawa dla klasy typów za pomocą tylko jednej metody (z wyjątkiem czegoś takiego jak 'SemiGroup', gdzie masz ustawę o asocjacji) –