gpt4 book ai didi

Haskell 类型化实例

转载 作者:行者123 更新时间:2023-12-04 01:59:26 24 4
gpt4 key购买 nike

我正在使用 cmdargs 从命令行程序中获取一些参数。我在我的程序中使用了一些特殊类型

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

我可以通过派生 Data 类中的 Function 数据类型,将这些类型直接传递到带有 "Max""Min""Moy""Med" 的参数中Typeable。我的问题是我的程序变得越来越复杂,我需要重命名我的构造函数以避免名称冲突。

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

但是,我想继续使用 "Max""Min""Moy""Med" 访问这些构造函数。为此,我想我需要创建自己的 DataFunctionTypeable 实例,对吗?

我的问题是即使在阅读了 Hackage 文档后我也没有设法创建这些实例。

您是否曾经成功创建过您自己的数据类型的 DataTypeable 实例?

最佳答案

在最新版本的 GHC 中,Typeable 根本无法由用户定义。它的转换操作应该是安全的,为此只允许自动派生的实例。

从 GHC 7.10 开始,它发生了进一步的变化:Typeable 现在可以为 所有 类型自动派生,所以 deriving Typeable 实际上是多余的(但可能被包括在内是为了向后兼容。)

数据 可以仍然是用户定义的,但我不确定这是个好主意。事实上,对于您的用例,我怀疑使用更简单的 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 -> ...

关于Haskell 类型化实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32980745/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com