Inheritance Haskell类型类继承和参数化类型类
我想说的是,某个参数化monad st可以使用常规内存,但是我的参数化monad的子类应该对内存类型施加额外的约束。代码:Inheritance Haskell类型类继承和参数化类型类,inheritance,haskell,typeclass,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) -&g
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替换;这会将状态转换为在其内存的typeclass中参数化的东西。可以这样做吗?我想你不能直接这样做。但是,通过添加一个间接级别,您可以非常有效地进行欺骗。有关如何操作,请参阅Haskell中John Hughes的受限数据类型: 这与使用的技术相同,例如,使用类在syb中获得开放递归 我很肯定这会给你指明正确的方向