Jeodezik hesaplamalar için bir kitaplık yazıyorum. Dahil etmek istediğim bir şey, ızgara projeksiyonları için bir türdür (örn. Ordnance Survey National Grid) ve bu ızgaralar üzerindeki noktaları ("eastings" ve "northings" ile belirtilir). Bir ızgara, Dünya'ya ve bir takım geometrik parametrelere bağlayan bir başlangıç noktasıyla belirtilir. Uygulama programcısı bu parametreleri kullanarak birçok rasgele ızgara oluşturabilir. Altta yatan farklı projeksiyonlara dayanan bir dizi ızgara da olacak.Uyumsuz değerleri ayırmak için türleri nasıl kullanırım
Açıkçası, grid noktaları (örn. Mesafe, yatak vb.), üzerinde hesaplamalar yapmak istiyorum ama aynı zamanda bir uygulama programcısının iki arasındaki mesafeyi sormasını engellemek için Haskell tipi sistemi kullanmak istiyorum. Farklı ızgaralarda noktalar. ST monadının hatları boyunca bir tip parametresi kullanan bir Reader Monad'in çalışıp çalışmayacağını merak ettim, fakat uygulama programcısının bu pozisyon değerlerini monad dışında saklamasını istiyorum, ST'nin ise STDS'nin sızmasını önlemekle ilgili olduğunu düşünüyorum. runST.
Altta yatan elipsoidler üzerinde jeodezik konumlarla (enlem & boylam) benzer bir sorunum var. Ancak grid versiyonunun açıklanması muhtemelen daha kolaydır, çünkü bu sorunun odağı jeodetikler yerine tip sistemidir.
GADT'leri ve varoluşsal türlerini okudum, ancak bunu nasıl yapacağımı göremiyorum.
Bu tür bir aritmetik ile yapmanın bir yolu olabilir: http://www.haskell.org/haskellwiki/Type_arithmetic – Wes
"ama aynı zamanda bir uygulama programcısının sormasını engellemek için Haskell tipi sistemi kullanmak istiyorum Farklı ızgaralardaki iki nokta arasındaki mesafe "- neden bu? Noktalar farklı ızgaralarda tanımlanabilir ve hala aynı _physical_ konumunu temsil edebilir, neden bu noktaların arasındaki mesafeyi hesaplamak istemezsiniz? – leftaroundabout
@leftaroundabout: evet, ancak bu bir koordinat dönüşümü ve daha karmaşık hesaplamalar gerektirir. Ayrıca bazı durumlarda basit düzlemsel hesaplama Doğru Şey'dir (örneğin radarlarla uğraşırken). –