Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Inheritance Haskell类型类继承和参数化类型类_Inheritance_Haskell_Typeclass - Fatal编程技术网

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

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

我想说的是,某个参数化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替换;这会将状态转换为在其内存的typeclass中参数化的东西。可以这样做吗?

我想你不能直接这样做。但是,通过添加一个间接级别,您可以非常有效地进行欺骗。有关如何操作,请参阅Haskell中John Hughes的受限数据类型:

这与使用的技术相同,例如,使用类在syb中获得开放递归

我很肯定这会给你指明正确的方向