簡體   English   中英

Data.List.Extra的list函數是list的同構嗎?

[英]Is Data.List.Extra's list function the catamorphism of list?

Haskell的基礎庫包含幾個函數,這些函數是各自數據類型的小寫版本,例如boolmaybeeither 在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.

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