下面的代碼不會編譯並給出的誤差如何驗證類型家庭存儲在json後?
無法與「C」 「C1」匹配類型「C1」是 結合的圖案構造的剛性類型的變量: SomeReq :: forall c。康涅狄格州C =>所需物品Ç - > SomeReq, 爲「運行」
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE ExistentialQuantification #-}
module Main where
import qualified Data.Text as T
class Conn c where
data Auth c :: *
data Env c :: *
data Req c :: *
getEnv :: Auth c -> IO (Env c)
runReq :: Env c -> Req c -> IO String
data SomeAuth = forall c. (Conn c) => SomeAuth (Auth c)
data SomeReq = forall c. (Conn c) => SomeReq (Auth c)
run :: SomeAuth -> SomeReq -> IO String
run (SomeAuth auth) (SomeReq req) = do
env <- getEnv auth
runReq env req
main :: IO()
main = return()
的原因existentials等式中是,我需要這些數據類型存儲在JSON。 (Auth c)
和(Req c)
總是seperatly存儲,但總是一起使用。
我假設的唯一可能的方法,使這項工作是有某種運行時檢查,以驗證這些類型匹配。我不知道該怎麼做。
你是說,你的JSON存儲決定了'C'是什麼?或者''是由代碼的靜態結構決定的? –
'C'是,我們可以運行請求的服務。例如S3,或谷歌 – whitehead1415