将任何数字类型作为参数的数据构造函数

我想知道是否可以创建一个数据构造函数,而不是采用特定类型可以采用任何给定类。

所以代替

data Container = ContainerI Int | ContainerF Float

就像是

Container::(Num a)=>a
data Container = Container a

回答

不是标准的 Haskell。实现这一点的正常方法是Container完全通用,然后(Num a) => Container a在重要的函数中使用require 。类型检查器将阻止编译尝试使用Container不受支持的类型的代码。

如果您真的想对此格外小心,您可以将实际构造函数从导出列表中删除,只提供具有(Num a)导出功能的函数,但这通常不是必需的。

举个例子,看看Data.Set。现实情况是,Set a要按预期工作,您将需要一个Eq a实例。但是这种限制只在操作 a 的函数中需要Set,而不是Set a本身的定义。


以上是将任何数字类型作为参数的数据构造函数的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>