Давеча искал я программное обеспечение для GTD, или по-русски «как привести дела в порядок». Конечно, многие инструменты красивые и простые, но у таких не хватает гибкости и возможностей настройки. Другие же — сложные монстры с горой ненужной функциональности. Как же совместить безграничную гибкость с простотой?
Я, как любитель текстовых интерфейсов, предпочёл предметно-ориентированный DSL язык вместо GUI. Но писать парсер языка с нуля далеко не просто. Гораздо приятнее надстроить типы над готовым языком Haskell.
Загрузка файла в интерпретаторе ghci
показывает, что Вселенная больше стека :)
Хотелось бы узнать какие запросы или отчеты к GTD инструменту были бы Вам полезны?
Я, как любитель текстовых интерфейсов, предпочёл предметно-ориентированный DSL язык вместо GUI. Но писать парсер языка с нуля далеко не просто. Гораздо приятнее надстроить типы над готовым языком Haskell.
data Статус
= НеСделано
| Делается
| Сделано
data Месяца
= Января
| Февраля
| Марта
| Апреля
| Мая
| Июня
| Июля
| Августа
| Сентября
| Октября
| Ноября
| Декабря
data Дата = Дата Integer Месяца Integer
data Когда
= КогдаНибудь
| С Дата
| По Дата
| Между Дата Дата
| Возраст Integer
data Куда
= НаРаботу
| Домой
| КЗаказчику
| НаКурорт
| ВМагазин
data Кого
= Сына
| Дочь
| Детей Integer
data НаКом
= Неизвестно
| Вера
| Катя
| Маша
data Что
= Дерево
| Дом
| Печень
| Предприятие
| Завод
| Школу
| ДетскийСад
| Университет
| Клад
data КакойДокумент
= Контракт
| Завещание
| Договор
| Диплом
data Праздник
= НовыйГод
| ДеньРождения
data ЧтоСделать
= Родиться
| Умереть
| Жениться НаКом
| Родить Кого
| Посадить Что
| Построить Что
| Окончить Что
| Найти Что
| Организовать Что
| Купить Что
| Продать Что
| Подписать КакойДокумент
| Заработать Integer
| Праздновать Праздник
| Сходить Куда
| Съездить Куда
| Слетать Куда
| Сплавать Куда
data Проект
= Проект String [Проект]
| Действие ЧтоСделать Когда Статус
жизнь :: Проект
жизнь = Проект "Жизнь" [
Действие Родиться (Возраст 0) Сделано,
Проект "Образование" [
Действие (Окончить Школу) (Возраст 16) Сделано,
Действие (Окончить Университет) (Возраст 20) Сделано
],
Проект "Семья" [
Действие (Жениться Неизвестно) КогдаНибудь Делается,
Действие (Родить Сына) КогдаНибудь НеСделано,
Действие (Родить Дочь) КогдаНибудь НеСделано,
Действие (Родить (Детей 1)) КогдаНибудь НеСделано
],
Проект "Работа" [
Действие (Подписать Контракт) КогдаНибудь НеСделано,
Действие (Заработать $ foldr (*) 1 [1..20]) КогдаНибудь Делается
],
Проект "Отдых" [
Действие (Праздновать НовыйГод) (Между (Дата 31 Декабря 2009) (Дата 4 Января 2010)) Делается
],
Действие Умереть КогдаНибудь НеСделано
]
вселенная :: Проект
вселенная = Проект "Все остальное" (repeat вселенная)
-- проект завершен, когда завершены все его действия
завершен :: Проект -> Bool
завершен (Действие _ _ Сделано) = True
завершен (Проект _ список) = all завершен список
завершен _ = False
-- nbgf ghbrjk
ответ :: Проект -> Integer
ответ _ = 42
Загрузка файла в интерпретаторе ghci
GHCi, version 6.8.2: http://www.haskell.org/ghc/ :? for help Loading package base ... linking ... done. Prelude> :l now/gtd/gtd.hs [1 of 1] Compiling Main ( now/gtd/gtd.hs, interpreted ) Ok, modules loaded: Main. *Main> ответ жизнь 42 *Main> ответ вселенная 42 *Main> завершен жизнь False *Main> завершен вселенная *** Exception: stack overflow *Main>
показывает, что Вселенная больше стека :)
Хотелось бы узнать какие запросы или отчеты к GTD инструменту были бы Вам полезны?
