Napisałem moduł matematyczny Vector
w języku Haskell.Haskell typ danych nazywanie pseudonimem
Więc zacząłem się z:
data Vector a = Vector !a !a !a deriving (Eq, Show)
Precyzyjna to pozwala mi użyć dowolnego typu danych liczbowych chcę. Problem polega na tym, że nie chcę pisać wszędzie ze względu na prostą przyczynę, dla której nie powinienem tego robić. Więc dodam:
type Scalar = Double
type Vector = Vector Scalar
Ale oczywiście, że druga linia jest źle, ponieważ nie istnieją obecnie dwie deklaracje Vector
. Więc do czego mam to zmienić? Myślę sobie, nie, zamierzam pisać to na całym moim kodzie, więc chcę zostawić alias typu po prostu jako Vector
. Co oznacza, że muszę zmienić nazwę typu danych. Ale jeśli to zmienię, to czuję, że powinienem również zmienić konstruktora, co sprawia, że wszystko jest bardziej zagmatwane. Ale jeśli czujesz się niezręcznie, konstruktor ma taką samą nazwę jak alias typu w ten sposób.
Teraz mam to:
type Scalar = Double
type Vector = VectorT Scalar
data VectorT a = Vector !a !a !a deriving (Eq, Show)
Wybrałem T
arbitralnie (myślę, że to oznacza „typ”), ale nie jestem tego pewien. Zwykle, gdy dokumentuję funkcje, powiedziałbym: -- Calculate the magnitude of a Vector
, ale z VectorT
mam wrażenie, że powinienem naprawdę używać nazwy typu , która to nazwa to. W związku z tym odwołuję się do nich jako vectors
(bez wielkich liter), z tym wyjątkiem, że muszę zastosować tę konwencję do każdego komentarza dla każdego typu danych.
Czy ktoś był w podobnej sytuacji? Czy w tym przypadku ktoś może pomyśleć o bardziej eleganckim rozwiązaniu?
Widziałem to kilka razy, w szczególności pakiet 'language-c' używa tego podejścia do definiowania reprezentacji drzewa składni. Jeśli nigdy nie spotkałeś się z tym stylem, zanim poczujesz się trochę niezręcznie, ale oczekuję, że ludzie szybko się do niego przyzwyczają. –
Istnieją tylko dwie trudne rzeczy w informatyce: unieważnianie pamięci podręcznej i nazywanie rzeczy. - Phil Karlton –
Może "VectorOf Double", jeśli nie podoba ci się 'VectorT'. – kennytm