Я новичок в haskell, я начал для своей собственной "культуры" кодировать следующий проект https://owickstrom.github.io/domain-modelling-with-haskell-workshop/, моей первой попыткой было определить Бюджет и Проект как отдельные типы данных (как предложено автором), но быстропри работе с функцией getBudget мне не удалось найти способ связать данный проект с его бюджетом со ссылкой на поле projectID.[Я просто постепенно следую инструкции и создаю код по пути, лично я считаю, что бюджет должен быть «внутренним» атрибутом проекта, и нет необходимости создавать отдельную структуру для кодирования бюджета, которая должна приводить к попытке2, но тем не менее ...]
попытки1:
data Budget = Budget ProjectID Income Expenditure deriving Show
data Project = SingleP ProjectID Name| GroupP [Project] deriving Show
для целей тестирования Я создал два "экземпляра"
testProject = SingleP 1 "Haskell workshop"
testBudget = Budget 1 100000.0 50000.0
testProject <-> testBudget связаны с идентификатором проекта,Мне не удалось написать функцию, которая будет принимать идентификатор, а затем «искать» соответствующий бюджет и получать данные бюджета.Если этого не сделать, я думаю, что я должен создать тип данных, который «встраивает» отношение следующим образом (попытка 2):
data Budget = Budget Income Expenditure
data Project = SingleP ProjectID Name Budget ....
, затем testProject = SingleP 1 "Haskell worskhop" testBudget
Мои вопросы: - ЯЯ правильно сказал, что невозможно закодировать такие отношения (я подозреваю, что это связано с неизменяемостью переменных, просто говоря, что я не могу «получить доступ» к testBudget в Haskell)?- любая такая «sql'ish» модель предметной области должна строиться вокруг «общего» типа данных, то есть типа, который «инкапсулирует» также отношение, потому что отношение не может быть запрограммировано функциональным образом.