4
什麼類型級等同於下面的存在性量化的字典,由Pipe
類型的啓發:存在性量化類型的類
{-# LANGUAGE ExistentialQuantification, PolymorphicComponents #-}
data PipeD p = forall cat . PipeD {
isoI :: forall a b m r . Iso (->) (p a b m r) (cat m r a b),
categoryI :: forall m r . (Monad m) => CategoryI (cat m r) ,
monadI :: forall a b m . (Monad m) => MonadI (p a b m) ,
monadTransI :: forall a b . MonadTransI (p a b) }
的粗略的想法,我去爲想說,鑑於(PipeLike p)
約束,我們可以推斷出(MonadTrans (p a b), Monad (p a b m)
和(使用僞代碼)(Category "\a b -> p a b m r")
。
的CategoryI
和MonadI
只是我用來表達思想,Category
,Monad
和MonadTrans
是(在某種程度上)這種PipeLike
類型的超類的類型類的字典中的等價物。
的Iso
類型只是以下詞典存儲的同構:
data Iso (~>) a b = Iso {
fw :: a ~> b ,
bw :: b ~> a }
我認爲相關的數據類型可能是正確的方向,儘管我根本不需要任何字典。我希望得到類似於:class(Monad(p a b m),MonadTrans(p a b),Category(Cat p))=> PipeLike p { - empty class - }'。同構的東西只是粘在存在的量化類型上,如果我使用關聯的數據類型,這是不必要的。 – 2012-08-10 22:07:55
您無法制作'Monad'和'MonadTrans'超類,因爲給定'p',無法選擇'a','b'和'm'。但是,您可以像我所示的那樣製作實例。他們將像原來的界面一樣工作。 – Heatsink 2012-08-11 13:53:46
這很有道理。感謝您清除我的想法。我會接受這個。 – 2012-08-11 16:08:25