【发布时间】:2014-06-06 21:17:47
【问题描述】:
我需要以下几类函数:
class InterleavedHomomorphic x where
interleaveHomomorphism :: (forall a . f a -> g a) -> x f -> x g
显然我给它起的名字在任何方面都不是任何东西的官方术语,而且上面的类型类也不是很优雅。这是一个有名字的概念,甚至是某个库中的实现吗?有没有更合理的方法?
这个函数的目的是我有一些上下文 f 来注释一些数据(Foo 和 Bar 只是为了这个问题而随机示例数据结构):
data Foo f = One (f (Bar f)) | Product (f (Foo f)) (f (Foo f))
data Bar f = Zero | Succ (f (Bar f))
我想以多态的方式转换数据的上下文;通过只知道上下文之间的同态而不(必然)关心数据本身。这可以通过在上面的示例中提供 instance InterleavedHomomorphic Foo 和 instance InterleavedHomomorphic Bar 来完成。
【问题讨论】:
标签: haskell functor category-theory comonad homomorphism