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 經過測試,結果如上所示,為什麼第三種是錯誤的,我也不清楚,希望有大佬可以幫我解...