測地計算用のライブラリを作成しています。私が含めたいことの 1 つは、グリッド投影 (Ordnance Survey National Grid など) のタイプと、それらのグリッド上のポイント ("eastings" と "northings" で指定) です。グリッドは、それを地球に結び付ける原点と一連の幾何学的パラメーターによって指定されます。アプリケーション プログラマは、これらのパラメータを使用して多くの任意のグリッドを作成できます。また、さまざまな基本的な予測に基づいて、さまざまな種類のグリッドが存在する予定です。
グリッド ポイント (距離、方位など) で計算を実行できるようにしたいのは明らかですが、同時に、Haskell 型システムを使用して、アプリケーション プログラマーが異なるグリッド上の 2 点間の距離を要求しないようにしたいと考えています。ST モナドに沿って型パラメーターを使用する Reader モナドが機能するかどうか疑問に思いましたが、アプリケーション プログラマーがこれらの位置の値をモナドの外に格納できるようにしたいと考えています。 runST。
基になる楕円体の測地位置 (緯度と経度) にも同様の問題があります。しかし、この質問の焦点が測地学ではなく型システムであることを考えると、グリッドバージョンはおそらく説明が簡単です。
GADT と実在型について読みましたが、これを行う方法がわかりません。