Я написал математический Vector
модуль на Haskell.
Итак, я начал с:
data Vector a = Vector !a !a !a deriving (Eq, Show)
Хорошо — это позволяет мне использовать любой числовой тип данных, который я хочу. Проблема в том, что я не хочу везде писать Double
и Vector Double
по той простой причине, что мне это не нужно. Поэтому я добавляю:
type Scalar = Double
type Vector = Vector Scalar
Но, конечно же, эта вторая строка неверна, так как теперь есть два объявления Vector
. Так на что мне его поменять? Я думаю про себя: нет, я буду писать это по всему коду, поэтому я хочу оставить псевдоним типа просто Vector
. Это означает, что я должен изменить имя типа данных. Но если я изменю это, то мне кажется, что я должен также изменить конструктор, что еще больше запутывает. Но если кажется неудобным, чтобы конструктор имел то же имя, что и псевдоним типа, таким образом.
Сейчас у меня есть это:
type Scalar = Double
type Vector = VectorT Scalar
data VectorT a = Vector !a !a !a deriving (Eq, Show)
Я выбрал T
произвольно (Думаю, это означает «тип» ), но я не уверен в этом. Обычно, когда я документирую функции, я бы сказал -- Calculate the magnitude of a Vector
,но с VectorT
я чувствую, что действительно должен использовать это имя типа . Поэтому я просто называю ихvectors
(не с заглавной буквы )— за исключением того, что я чувствую, что должен применять это соглашение к каждому комментарию для каждого типа данных.
Кто-нибудь был в подобной ситуации? Может ли кто-нибудь придумать более элегантное решение в этом случае?