Псевдонимы типов данных Haskell

Я написал математический 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(не с заглавной буквы )— за исключением того, что я чувствую, что должен применять это соглашение к каждому комментарию для каждого типа данных.

Кто-нибудь был в подобной ситуации? Может ли кто-нибудь придумать более элегантное решение в этом случае?

9
задан mk12 8 July 2012 в 05:22
поделиться