W Haskell, przy definiowaniu typu danych można wybrać automatyczne uzyskanie niektórych wystąpień, ale czy mogę odroczyć automatyczne wyprowadzenie, być może nawet umieścić je w innej bibliotece? .Automatyczna instancja wywodząca się z deklaracji
Oto przykład:
Automatyczne uzyskiwanie w Haskell jest oszczędność czasu rzeczywistego!
module MoneyModule where
data Money = Money Int
deriving Show
Teraz chcę użyć MoneyModule
, ale także chcą Read
instancję Money
:
module ExternalModule where
instance Read Money where
read = error "Can't this be done automatically instead?"
Ale ja naprawdę wolałbym, aby była ona pochodzi automatycznie, co wiem ghc mógł zrobić, jeśli tylko autor MoneyModule automatycznie wyprowadził instancję Read
.
wiem, że:
- Lepiej rozwiązać problem w rzeczywistej
MoneyModule
przez łatanie go brakującej instancji. - Uważa się, że wystąpienie sierocińca jest złe. Deklaracje instancji są korzystnie umieszczane w module, w którym zdefiniowano typ klasy lub typ danych .
W moim przypadku nie mogę zastosować najlepszych praktyk, ponieważ klasa typu nie jest związana z typem danych. Wątpię, aby moduł klasy typów ani moduł typu danych chciał zatrzymać instancję, dlatego tworzę trzecią bibliotekę, ponieważ w niektórych aplikacjach potrzebujesz deklaracji instancji.