Haskell类型类继承和参数类型类

时间:2010-07-13 07:24:41

标签: inheritance haskell typeclass

我想说某个参数化的monad st与常规内存一起工作,但是我的参数化monad的子类应该对内存类型施加额外的约束。在代码中:

class Memory m where
    ...

class State st where
    unit :: Memory m => a -> st m m a
    bind :: (Memory m1, Memory m2, Memory m3) => st m1 m2 a -> (a -> st m2 m3 b) -> st m1 m3 b

class RMemory m where
    ...

class State st => RState st where
    -- no operators

现在我的问题是我希望强制每当(RState st)为真,然后在(State st)定义内部将内存替换为RMemory;这会将State变成在其内存的类型类中具有参数的东西。可以这样做吗?

1 个答案:

答案 0 :(得分:3)

我怀疑你不能直接这样做。但是,您可以通过添加间接级别来非常有效地作弊。请参阅John Hughes在Haskell中的限制数据类型,了解如何执行此操作:http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.39.2816

这与使用例如在syb-with-class中获得开放递归的技术相同。

我很确定这应该指向正确的方向。