Я только начал изучать Haskell и до сих пор не понял функционального программирования.Мне нужно создать полиморфный тип данных, тип которого я не знаю, пока не запустится одна из написанных мной функций.Кажется, программа хочет, чтобы я создал список кортежей из списка, например:
['Car', 'Car', 'Motorcycle', 'Motorcycle', 'Motorcycle', 'Truck']
будет преобразовано в [('Car', 2), ('Motorcycle', 3), ('Truck', 1)]
.
в одном и том же списке кортежей (aсумка), все элементы будут одного типа, но разные сумки могут содержать другие типы.Прямо сейчас мое объявление типа данных (я не уверен, называется ли оно «объявлением» в FP):
type Amount = Int
data Bag a = [(a, Amount)]
Однако, когда я пытаюсь загрузить модуль, я получаю эту ошибку:
Cannot parse data constructor in a data/newtype declaration: [(a, Amount)]
Если в объявлении изменить data
на type
, я получу сообщение об ошибке для всех функций:
Expecting one more argument to ‘Bag’
Expected a type, but ‘Bag’ has kind ‘* -> *’
Есть ли что-то, чего я не понимаю в FP илиЭто ошибка кода? И что более важно, как я могу объявить это таким образом, чтобы фактически позволить мне загрузить модуль в GHCi?