servant hakkında heyecanlıyım ve dahili typelevel sihirbazının yolunda gitmediği sürece iyiyim ve Beni şaşırtan tek şey, genel API'de type-proxy'un kullanılmasıdır. İşte code var:Data.Proxy servant'ın public API'sinde (neden Proxy with ScopedTypeVariables çalışmaz)
serve :: HasServer layout => Proxy layout -> Server layout -> Application
serve p server = toApplication (runRouter (route p (return (RR (Right server)))))
Anlıyorum gibi, tip-yakınlık oldukça basit şey vardır ve bu tip bir değere sahip olmadığında bir tür taşımak için ihtiyaç vardır. Öyleyse, Server'ın tip parametresinde zaten düzen türü olduğunda, düzen türü taşıyan bir proxy'yi neden geçmeliyiz?
{-# LANGUAGE ScopedTypeVariables #-}
serve :: forall layout . HasServer layout => Server layout -> Application
serve server = toApplication (runRouter (route p (return (RR (Right server)))))
where
p :: Proxy layout
p = Proxy
Ve şaşırtıcı bana (düzen tür uyuşmazlığını şey söylüyorum) derlenmeyecektir: Ben buna klonlama hizmetçinin repo ve değişen kod denedim. Ama neden, yerel p'm sunucu ile aynı düzen türüne sahip olmamalıdır (ScopedTypeVariables açıkken)?
Çalıştırılabilir örnek, lütfen. –
@ AndrásKovács, soru temel olarak (ve hangi durumlarda) yerel aynı tip taşıyan p parametresi olarak harici olarak aktardığımızla aynı değildir. Üzgünüm, ama neler olduğunu anlayamadığımdan, 'git clone https://github.com/haskell-servant/servant.git' olmaksızın bunu daha basit durumlarla nasıl yeniden üreteceğimi bilmiyorum. – aemxdp