【发布时间】:2012-08-10 19:00:26
【问题描述】:
受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 和Monad 和MonadTrans 是(某种)超类的想法的那些类型类的字典等价物这个PipeLike 类型。
Iso 类型只是以下存储同构的字典:
data Iso (~>) a b = Iso {
fw :: a ~> b ,
bw :: b ~> a }
【问题讨论】:
标签: haskell