Haskell上のGTD DSL

最近、 GTD用のソフトウェア、またはロシア語で「物を整理する方法」を探していました。 もちろん、多くのツールは美しくシンプルですが、柔軟性とカスタマイズオプションが不足しています。 その他は、不必要な機能が山ほどある複雑なモンスターです。 無制限の柔軟性とシンプルさを組み合わせる方法



私は、テキストインターフェイスのファンとして、 GUIではなくサブジェクト指向のDSL言語を好みました。 しかし、言語パーサーをゼロから作成することは簡単ではありません。 完成したHaskell言語に型を追加する方がはるかに優れています







 データ状態
     =未実施
     | 行われています
     | 製

今月のデータ
     = 1月
     |  2月
     | マーサ
     |  4月
     |  5月
     |  6月
     |  7月
     |  8月
     | 九月
     |  10月
     |  11月
     |  12月

データ日付=月の日付整数整数

データ
     =いつ
     |  C日付
     | 日付で
     | 日付間
     | 年齢の整数

へのデータ
     =作業中
     | ホーム
     | お客様へ
     | ナクルト
     | 店で

データWhom
     =息子
     | 娘
     | 子整数

データコム
     =不明
     | 信仰
     | カティア
     | マーシャ

データ何
     =ツリー
     | ハウス
     | 肝臓
     | 会社
     | 工場
     | 学校
     | 幼稚園
     | 大学
     | 宝物

データWhat Document
     =契約
     | 遺言
     | 契約
     | 卒業証書

データ休日
     =新年
     | 誕生日

データ対処方法
     =生まれた
     | 死ぬ
     | 結婚して
     | 出産する
     | 何を植える
     | ビルドする
     | 何を終える
     | 何を見つける
     | 何を整理する
     | 何を買う
     | 何を売る
     | どのドキュメントに署名する
     | 整数を獲得
     | 祝日を祝う
    
     | どこへ行く
     | に行く
     | 飛ぶ
     | に浮かぶ

データプロジェクト
     =プロジェクト文字列[プロジェクト]
     | アクション状況対処方法

ライフ::プロジェクト
 life = Project "Life" [
     Action Born(Age 0)完了、
    教育プロジェクト[
        アクション(卒業)(16歳)完了、
        アクション(卒業)(20歳)完了
         ]、
    プロジェクト「家族」[
        アクション(不明)何かが完了したら、
        一度も実行されていない場合のアクション(息子への出産)
        実行されていない場合のアクション(娘を産む)
        アクション(出産(子供1))WhenNever Done
         ]、
    プロジェクト「仕事」[
        アクション(契約に署名)なしの場合、
        アクション($ foldr(*)1 [1..20]を獲得)何かが完了したとき
     ]、
    プロジェクト「休憩」[
        アクション(新年を祝う)(2009年12月31日の間(2010年1月4日))
     ]、
    何かが行われないとアクションが死ぬ
     ]

ユニバース::プロジェクト
 universe = Project "Everything Else"(ユニバースの繰り返し)

 -プロジェクトは、すべてのアクティビティが完了すると完了します
完了::プロジェクト-> Bool
完了(アクション_ _完了)= True
完了(プロジェクト_リスト)=完了したすべてのリスト
完了_ = False

 -nbgf ghbrjk
回答::プロジェクト->整数
答え_ = 42




ghciインタープリターでファイルをダウンロードする



 GHCi、バージョン6.8.2:http://www.haskell.org/ghc/ :? 助けを求めて
パッケージベースを読み込んでいます...リンクしています...
プレリュード>:l now / gtd / gtd.hs
 [1 of 1] Mainのコンパイル(現在/ gtd / gtd.hs、解釈済み)
 OK、ロードされたモジュール:メイン。
 *メイン>ライフアンサー
 42
 * Main> answer universe
 42
 *メイン>ライフ完了
偽
 *メイン>完成した宇宙
 ***例外:スタックオーバーフロー
 *メイン> 




宇宙がスタックよりも大きいことを示しています:)



GTDツールへのどのクエリまたはレポートが役立つかを知りたいですか?



All Articles