Справочная информация: Я работаю над своей первой полной программой на Haskell, простым приложением-списком на командная строка.
Мой вопрос касается структуры и имеет два уровня: (1) Как лучше всего это сделать? и (2) Какой (функциональный) способ сделать это в Haskell? Я так сформулировал это потому, что подозреваю, что может быть более быстрый или простой способ сделать это, игнорирующий принципы функционального программирования. Я хотел бы сделать это более элегантным и понятным способом, поскольку это скорее обучающее упражнение, чем что-либо еще.
Имейте в виду, что я (очевидно) хотел бы, чтобы приложение было несколько устойчивым. Прямо сейчас в таблице есть два варианта: хранить информацию в простом текстовом файле или, поочередно, в базе данных Sqlite.
Первая структура, которая пришла на ум, была примерно такой, где объект типа ToDoList представляет собой просто список ToDo items:
import Data.List
import Data.Time
data ToDo = ToDo {
todoId :: Int,
todoDue :: ZonedTime,
todoCreated :: UTCTime,
todoItem :: String,
todoPriority :: Priority,
todoStatus :: Status
}
deriving (Show, Read)
type ToDoList = [ToDo]
data Priority = Low | Medium | High
deriving (Show, Read, Eq, Ord)
data Status = Complete | InProgress | Open
deriving (Show, Read, Eq, Ord)
Но потом я начал задаваться вопросом, как лучше всего хранить предметы этого типа. Означает ли это, что я храню их в плоском файле? Есть ли способ связать объекты строго определенных типов, подобных этому, с полями / столбцами в базе данных?
Когда я думаю об использовании базы данных Sqlite, мне кажется, что вся работа будет выполняться в вызовах базы данных, а типы Haskell будут иметь сравнительно мало общего с этим. Это кажется плохим.
Таким образом, вопрос в том, как лучше всего смоделировать структуру данных моего простого приложения со списком дел в соответствии с представлениями о функциональном программировании и идеалами Haskell, которые я пытаюсь применить в этом проекте?