簡體   English   中英

Haskell類型類繼承和參數類型類

[英]Haskell typeclass inheritance and parametric 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變成在其內存的類型類中具有參數的東西。 可以這樣做嗎?

我懷疑你不能直接這樣做。 但是,您可以通過添加間接級別來非常有效地作弊。 請參閱John Hughes在Haskell中的限制數據類型,了解如何執行此操作: http//citeseerx.ist.psu.edu/viewdoc/summary?doi = 10.1.1.39.2816

這與使用例如在syb-with-class中獲得開放遞歸的技術相同。

我相當肯定這應該指向正確的方向。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM