Rozpocząłem to nowe pytanie, ponieważ stało się kontynuacją poprzedniego pytania.Używanie typów danych w Haskell
Jeśli mam dwa typy danych, które składają się z podobnych wykonawców:
data A = X | Y | Z
data B = X | Y
istnieje żaden sposób nie mogę jakoś reprezentować to jako:
data A = C | Z
data B = C
data C = X | Y
jeśli można zobaczyć, co robię - Próbuję zgrupować X | Y w jeden typ danych, który może następnie zostać użyty przez wiele innych typów danych. Nie mogę sprawić, żeby kompilator zezwolił na to, lub jeśli tak, nie mogę dopasować wzorca do X lub Y, tylko do C ??
Otrzymuję komunikat o błędzie, że C zostało zadeklarowane wiele razy.
Pomyślałem, że mógłbym użyć typów, ale nie pozwalają na wiele typowań.
EDIT
Nawet jeśli Oświadczam długą drogę (jak poniżej), to nadal nie będzie kompilować i mówi, X i Y mają wielokrotne deklaracje:
data A = X | Y | Z
data B = X | Y
Co pytasz o byłby podtyp 'A '. Nie zostałby zadeklarowany ze słowem kluczowym "dane", które tworzy nowy typ, rozłączny z wcześniejszymi typami. Nie sądzę, że Haskell ma jakąś taką funkcję, ale nie jestem zwolennikiem wszystkich rozszerzeń Haskella. – Gilles
@Gilles: Nie, Haskell nie ma żadnego polimorfizmu podtypu. Ma tylko parametryczny polimorfizm i polimorfizm ad-hoc poprzez klasy typów. Najbliższą rzeczą, jaką można uzyskać, jest typ egzystencjalny, ale to prawie, ale nie całkiem, zupełnie inna sprawa. –
Powiedziałabym to jako odpowiedź, ale ponieważ nie jest całkiem .. Możesz być w stanie zbliżyć się do tego, co chcesz, deklarując typografię, a następnie operacje, które są potrzebne do tych "zwykłych rzeczy". Jest to dość popularny sposób odwracania rzeczy do rozwiązania (wersja) tego problemu .. –