簡體   English   中英

Haskell Typeable實例

[英]Haskell Typeable instance

我正在使用cmdargs從命令行程序中獲取一些參數。 我在我的程序中使用了一些特殊類型

data Function = Max
              | Min
              | Moy
              | Med
              deriving (Eq,Data,Typeable)

我可以通過在類DataTypeable派生Function數據類型,直接在帶有"Max" "Min" "Moy" "Med"的參數中傳遞這些類型。 我的問題是我的程序變得越來越復雜,我需要重命名我的構造函數以避免名稱沖突。

data Function = funMax
              | funMin
              | funMoy
              | funMed
              deriving (Eq,Data,Typeable)

但是,我想繼續使用"Max" "Min" "Moy" "Med"訪問這些構造函數。 為此,我想我需要創建自己的DataTypeable 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.

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