私は測地計算のためのライブラリを作成しています。私が含めることの1つは、グリッド投影(例えば、陸上測量ナショナルグリッド)のタイプとそれらのグリッド上のポイント( "eastings"と "northings"で指定)です。グリッドは、地球とそれを幾何学的パラメータの束に結びつける原点によって指定されます。アプリケーションプログラマは、これらのパラメータを使用して多くの任意のグリッドを作成できます。また、さまざまな基礎的な予測に基づいて、さまざまな種類のグリッドが作成されます。タイプを使用して互換性のない値を分離する方法
明らかにグリッドポイント(距離、ベアリングなど)の計算ができるようにしたいのですが、同時にアプリケーションプログラマが2つの間の距離を求めるのを防ぐためにHaskellタイプのシステムを使用したい異なるグリッド上の点。私は、STモナドの行に沿った型パラメータを使用するReader Monadが動作するのか疑問に思っていましたが、アプリケーションプログラマがモナドの外にこれらの位置の値を格納できるようにしたいのですが、STはすべてSTRefのrunST。
私はまた、下にある楕円体の測地位置(緯度&経度)にも同様の問題があります。しかし、グリッド・バージョンは、この問題の焦点が測地学ではなくタイプ・システムであるため、おそらく説明が簡単です。
私はGADTと実存型を読みましたが、これを行う方法はわかりません。
算術演算でこれを行う方法があります:http://www.haskell.org/haskellwiki/Type_arithmetic – Wes
"しかし同時に、アプリケーションプログラマが要求しないようにHaskell型システムを使用したい異なるグリッド上の2点間の距離 " - それはなぜですか?ポイントは異なるグリッド上で定義されても同じ_物理的な位置を表しますが、そのようなポイント間の距離の計算を許可しないのはなぜですか? – leftaroundabout
@leftaroundabout:はい、それには座標変換とより複雑な計算が必要です。また場合によっては、単純な平面計算が右のもの(例えば、レーダーを扱う場合)です。 –