簡體   English   中英

Haskell 的 Data.Typeable 是什么?

[英]What is Haskell's Data.Typeable?

我遇到過對 Haskell 的Data.Typeable的引用,但我不清楚為什么要在我的代碼中使用它。

它解決了什么問題,如何解決?

Data.Typeable是一種眾所周知的方法(參見 Harper)的編碼,用於在靜態類型語言中實現延遲(動態)類型檢查——使用通用類型。

這種類型包裝了類型檢查直到稍后階段才會成功的代碼。 編譯器不會將程序作為錯誤類型拒絕,而是將其傳遞給運行時檢查。

這種風格起源於 Abadi 等人,由 Cheney 和 Hinze 為 Haskell 開發,作為表示所有動態類型的包裝器, Typeable class 出現在 SPJ 和 Lammel 的 SYB 工作中。


參考


即使在教科書中:動態類型(具有可類型表示)是只有一種類型的靜態類型語言,Harper ch 20:

20.4 無類型意味着單一類型

無類型的 λ 演算可以忠實地嵌入到具有遞歸類型的類型語言中。 這意味着每個無類型的 λ-term 都有一個作為類型化表達式的表示,這樣一個 λ-term 的表示的執行對應於該術語本身的執行。 這種嵌入不是為 ℒ{+×⇀µ} 中的 λ-演算編寫解釋器(我們當然可以這樣做),而是將非類型化 λ-項直接表示為具有遞歸類型的語言中的類型化表達式.

關鍵的觀察是無類型的 λ-演算實際上是單類型的λ-演算! 賦予它強大的不是類型的缺失,而是它只有一種類型,即遞歸類型

D = µt.t → t。

它是一個允許命名類型的庫。 如果類型a被聲明為Typeable ,那么您可以使用show $ typeOf x獲取它的名稱,其中x是類型a的任何值。 它還具有有限的類型轉換功能。

(這有點類似於 C++ 的 RTTI 或動態語言的反射。)

我能找到的關於 Haskell 的類似Data.Typeable庫的最早描述之一是 John Peterson 從 1992 年開始的: http://www.cs.yale.edu/publications/techreports/tr1022.Z414EE0975BA419724

我知道的最早介紹實際Data.Typeable庫的“官方”論文是 2003 年的第一篇 Scrap Your Boilerplate 論文: http://research.microsoft.com/en-us/um/people/simonpj/Papers/hmap/索引.htm

我敢肯定這里有很多人可以參與其中的歷史!

Data.Typeable class 主要用於Scrap Your Boilerplate (SYB) 風格的通用編程。 另請參閱Data.Data

這個想法是 SYB 定義了一個集合組合器,用於在各種用戶創建的類型上以統一的方式執行諸如打印、計數、搜索、替換等操作。 Typeable類型類提供了必要的管道。

在現代 GHC 中,您可以在定義自己的類型時只說deriving Data.Typeable以便為其提供必要的實例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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