[英]Haskell Typeable instance
我正在使用cmdargs
從命令行程序中獲取一些參數。 我在我的程序中使用了一些特殊類型
data Function = Max
| Min
| Moy
| Med
deriving (Eq,Data,Typeable)
我可以通過在類Data
和Typeable
派生Function
數據類型,直接在帶有"Max" "Min" "Moy" "Med"
的參數中傳遞這些類型。 我的問題是我的程序變得越來越復雜,我需要重命名我的構造函數以避免名稱沖突。
data Function = funMax
| funMin
| funMoy
| funMed
deriving (Eq,Data,Typeable)
但是,我想繼續使用"Max" "Min" "Moy" "Med"
訪問這些構造函數。 為此,我想我需要創建自己的Data
和Typeable
Instances of Function
,是嗎?
我的問題是,即使在閱讀Hackage文檔之后我也無法創建這些實例。
您是否成功創建了自己的數據類型的Data
和可Typeable
實例?
在最近的GHC版本中, Typeable
根本無法由用戶定義。 它的轉換操作應該是安全的,因為只允許自動派生的實例。
由於GHC 7.10,它的進一步改變: Typeable
現在自動導出的所有類型,所以deriving Typeable
實際上是冗余的(但可以包括用於向后兼容性。)
Data
還可以是用戶定義的,但我不知道這是一個好主意。 事實上,對於您的用例,我懷疑使用更簡單的Read
類會更好。
您還可以通過將構造函數拆分為不同的模塊來重命名構造函數,並導入該限定符:
module Types.Fun where
data Function = Max
| Min
| Moy
| Med
deriving (Eq,Data,Typeable)
...
module Main where
import qualified Types.Fun as Fun
... case ... of Fun.Max -> ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.