Я пытался кодировать реляционную проблему в Haskell, когда мне приходилось выяснять, что делать это безопасным типом - это далеко не очевидно. Например. смиренныйПочему так сложно справиться с реляционными операциями типа?
select 1,a,b, from T
уже возникает целый ряд вопросов:
- что тип этой функции?
- Какой тип проекции
1,a,b
? Каков тип проекции в целом? - Каков тип результата и как выразить связь между типом результата и проекцией?
- Какой тип такой функции принимает любой действительный проектор?
- Как я могу определить недопустимые прогнозы во время компиляции?
- Как добавить столбец в таблицу или в проекцию?
Я считаю, что даже язык PL/SQL Oracle не дает этого совершенно правильно. В то время как проекции invald в большинстве случаев обнаруживаются во время компиляции, это большое количество ошибок типа, которые отображаются только во время выполнения. Большинство других привязок к РСУБД (например, Java jdbc и perl DBI) используют SQL, содержащиеся в Strings, и, таким образом, полностью исключают безопасность типов.
Дальнейшие исследования показали, что есть некоторые библиотеки Haskell (HList, vinyl и Trex), которые обеспечивают безопасный тип расширяемые записи и некоторые другие. Но для этих библиотек требуются расширения Haskell, такие как DataKinds, FlexibleContexts и многие другие. Кроме того, эти библиотеки нелегки в использовании и имеют запах обмана, по крайней мере, для неинициализированных наблюдателей, подобных мне.
Это говорит о том, что этанепосредственные реляционные операции не соответствуют хорошо функциональной парадигме, по крайней мере, не так, как это реализовано в Haskell.
Мои вопросы следующие:
- Каковы основные причины этой трудности в реляционной модели операции безопасным способом типа. Где Хиндли-Милнер не хватает? Или проблема возникает уже при типичном исчислении лямбда?
- Есть ли парадигма, где реляционные операции являются гражданами первого класса? И если да, то существует ли реальная реализация?
Вы просматривали библиотеки, которые позволяют безопасный доступ к БД в Haskell? Например. http://www.yesodweb.com/book/persistent? – chi
Пока нет. Доступ к базе данных не является моей главной задачей. Но эти пакеты должны были решить мои проблемы так или иначе, поэтому я мог бы взглянуть. Благодарю. –