如何用Haskell實現物件導向程式設計?

時間 2021-05-31 13:04:53

1樓:圓角騎士魔理沙

剛剛讀完了Haskell』s overlooked object system,

給出了幾個proposal,最後深入研究用HList encode recursive record。。。

很有意思,比如說,class,label是first class的,所以多重繼承玩得很溜,比如說可以自己控制菱形繼承

upcasting靠HList運算,得出least upper bound

subtyping靠typeclass bound推導,比如用到getX的class p就是有相應的typeclass constraint,用文中的話說,就是『一股C++ template的氣息撲面而來』

然後還有一定量的trick,比如如何upcast了又能downcast,比如如何防止virtual method沒定義就(遞迴)引用。。。就自己看吧,有79頁,好長啊,orz

不過還好資訊密集度對於看過OO Theory(如inheritance is not subtyping)之類的東西的人不算高。。。

2樓:韓冬

瀉藥,hackage上對OOP模擬的最像的應該是這個了吧:GitHub - fumieval/objective: Purely functional objects。

基本思路很簡單,這裡的Object模擬了OOP裡的class定義的方法,也就是各種各樣的狀態轉移函式,這裡的Instance使用了乙個MVar來模擬OOP裡的例項,也就是各種各樣的狀態資料,然後使用型別類抽象出諸如new, (.-)這樣的函式來建立例項,呼叫類方法。雖然整個DSL感覺像是個玩笑,可是仔細一想,OOP不也就是這麼回事兒嘛。

PS: 樓主不妨明確一下什麼是「OO的思路和效果」,這樣我也好從FP的角度具體解答對應的思路和效果。

haskell 如何用fold分組

葉芝秋 我提供一種方法 groupBynxs snd foldr group 1,i quot n x i,x zip 0 xs where group i x j,yss i j i,x head yss tail yss otherwise i,x yss 演算法思想 首先從0開始列舉元素,並將...

如何用python實現行列互換?

程式設計小白一枚,使用python 3.6 笨辦法 b fori inrange len a 0 row forj inrange len a row.a j i b.row print b 以上寫成一句 print row i for rowina fori inrange len a 0 用函式...

如何用hooks實現class元件this setState的callback

supyp 我說說我所知道的方法 const count1,setCount1 React.useState 0 const count2,setCount2 React.useState 0 setCount1 num 經過測試,結果如上所示,為什麼第三種是錯誤的,我也不清楚,希望有大佬可以幫我解...