linerlock/parseq — pull request #8 by takeshik (2013-05-18 21:04:47+00:00)
Title: Extract interfaces and introduce covariance

## 概要

インターフェイスの抽出および共変性の導入。

## 目的

例えば、```Parser``` が引数などで求められるときに、```Parser``` を与えることができないという問題の解決。

## 詳細

* Parseq 内の主要な型について、インターフェイスを抽出しました。既存の各種メンバについても、基本的に新しく作成されたインターフェイス群を取り扱うようにしました。
* 新しいインターフェイスおよび既存のデリゲート型について、可能な限り共変性を付与しました。

## 注意点

* ```TryGetValue``` などの出力変数を伴うメソッドについては、共変性付与の妨げとなるため、下策ではあるが ～Extensions クラスの拡張メソッドとしてインターフェイスから切り離しました。暗黙に this 引数の型を現状唯一の実装型と仮定しているどん底な実装ですが、現状では問題ないと思われます。あんまりなようなら直してくれると助かります。
* ビルドが通ることと、目的を達したことは確認しましたが、実際の挙動の一貫性は確認してません。

ご検討ください。