この記事はScalaz Advent Calendarの15日目の記事です。
scalazのcoreのjarに含まれ、独自のパッケージが存在しながらも、全く話題に上がらないundoについて書きます。
scalaz.undo以下にはUndoTとHistoryの2つのデータ型があります。
UndoはHistoryを状態とするStateモナドで、Historyはundo, redoの為のListと、currentのデータを持ちます。
例を作ってみます。
この時、Historyはこのように変遷しています。
History("initialize", Nil, Nil) // eval("initialize")
History("hello", List("initialize"), Nil) // hput("hello")
History("world", List("hello", "initialize"), Nil) // hput("world")
History("hello", List("initialize"), List("world")) // undo
History("world", List("hello", "initialize"), Nil) // redo
これを使っているユーザーがどれだけいるのか気になるところです。
これだけでは物足りないと思ったので、MonadStateについて書こうと思いましたが、UndoTのMonadStateのインスタンスの定義がおかしい気がする。
なので今日はpull requestを投げて終わります。
0 件のコメント:
コメントを投稿