![](/img/trans.png)
[英]Understanding groupSort and groupOn functions in Data.List.Extra library
[英]Is Data.List.Extra's list function the catamorphism of list?
Haskell的基礎庫包含幾個函數,這些函數是各自數據類型的小寫版本,例如bool
, maybe
和either
。 在Data.Bool.Extra的源代碼中, bool
函數明確表示為數據類型的分類:
bool = curry cata
現在,使用示例中的遞歸方案中定義的分類,似乎上述基礎庫函數都是其數據類型的所有分類,例如對於Maybe:
-- base library definition
maybe n _ Nothing = n
maybe _ f (Just x) = f x
-- definition with cata
newtype Fix f = Fix {unFix :: f (Fix f)}
cata :: Functor f => (f a -> a) -> Fix f -> a
cata alg = alg . fmap (cata alg) . unFix
maybe n f m = cata alg where
alg Nothing = n
alg (Just x) = f x
但是,Data.List.Extra的list
函數在注釋中只是作為“對列表的非遞歸轉換,例如'maybe'”,但由於與數據類型相比是非遞歸的,因此顯然不是列表的任何遞歸方案,或者是? 這就是為什么它沒有在基礎庫中定義嗎? 函數是否還有其他良好的理論特性?
[]
的同構是foldr
。
extra
包中的list
函數是對Scott編碼的轉換,而同形同構是對Church編碼的轉換。 由於Scott編碼是非遞歸的,因此它們不能真正對應於任何遞歸方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.