Я начал играть с Haskell, прочитал несколько руководств и одну из официальных книг (lyah). Я почувствовал, что смогу начать свой первый персональный проект. А что касается любого нового языка, который я выбираю, я хотел бы реализовать пакет для обработки линейной алгебры (операции вокруг матриц, векторов и т. Д.). Функции в порядке, но я не зашел слишком далеко с типами данных.Определение нового типа данных без конструкторов данных
Первоначально, у меня была функция, которая выглядела так:
add_vect :: (Num a) => [a] -> [a] -> [a]
add_vect x y = zipWith (+) x y
Теперь я хочу, чтобы дать имя (Vector
) к тому, что [a]
средства, так что vect_add
будет выглядеть так:
vect_add :: Vector -> Vector -> Vector
vect_add x y = zipWith (+) x y
После многих амбициозных попыток я закончил (вдохновленный определением String
) с очень простым определением:
type Vector = [Int]
Проблема заключается в том, что я теряю универсальность типа для моей функции, которая теперь работает только с [Int]
вместо любого числового типа.
Мой вопрос: Есть ли способ выразить типичность (используя, например, calsses типа) определение новых типов. Нечто похожее на:
type Vector = (Num a) => [a]
или, возможно, любой другой способ держать типичность моих Vector
«S?
Даже если вы могли бы делать то, что хотели, потому что 'a' не является конкретным типом, вам все равно придется превратить' Vector' в конструктор типа ** ** Vector a' .. точно так же, как вы не можете иметь «Maybe = Nothing» Просто. 'Maybe' - это конструктор типа,' Maybe Int' - это тип. –