2013-02-12 33 views
1

firsttwo廢你的樣板論文描述編寫一般工種的通用功能的一種方式,但對特定類型的特殊情況。例如,fromJSONaeson包,定義了一個通用函數用於從JSON轉換,但對於類型,如列表或Int提供特殊情況:當前SYB是否允許使用新類型擴展泛型函數?

parseJSON :: (Data a) => Value -> Parser a 
parseJSON j = parseJSON_generic j 
      `ext1R` list 
      `ext1R` vector 
      `ext2R'` mapAny 
      `ext2R'` hashMapAny 
      -- Use the standard encoding for all base types. 
      `extR` (value :: F Integer) 
      `extR` (value :: F Int) 
       ... 

然而,如the third SYB paper指出,「所有的類型特定的情況下[當通用函數定義的遞歸結被綁定時,需要]立即提供 。本文隨後提出了一種通過類型機制解除這種限制的方法。所述syb包的

前兩個SYB論文(有一些修改)部分,但第三個不是。有沒有其他方法可以解除所有類型特定情況需要在Hackage上實現SYB的同時指定?

回答

1

還有,據我所知,周圍的系統內的限制,沒有辦法。事實並非如此,因此需要在第三篇論文中引入新的方法。有工作syb與類的代碼,執行關於hackage的第三篇論文:http://hackage.haskell.org/package/syb-with-class

但是,我現在的建議是嘗試嘗試新的泛型機制,它更快,更原則,更靈活(儘管偶爾會有一種真正的痛苦:-))。

+0

姆姆。我對新的泛型框架的問題是,如果您的編碼標籤字段很難重建數據。無論如何,謝謝。 – scvalex 2013-02-13 19:48:38