[([Char], t)] 在文件中,我将类型定义为: type list -6ren">
gpt4 book ai didi

Haskell 为 Int 和 Double 打字

转载 作者:行者123 更新时间:2023-12-04 18:19:18 29 4
gpt4 key购买 nike

只是关于打字的快速问题。

如果我输入 ghci :t [("a",3)]我回来了[("a",3)] :: Num t => [([Char], t)]
在文件中,我将类型定义为:

type list = [(String, Int)]

如何更改类型以同时支持 Int s 和 Double s 与我定义的类型,类似于我在 ghci 中写的?

最佳答案

首先,您的代码中有错误。数据类型必须以大写字母开头:

type List = [(String, Int)]

(注意 String[Char] 的类型同义词,即它们是完全相同的类型)。我们将以迂回的方式解决您的问题。请注意,您可以在元组的第二个槽中使类型完全通用:
type List a = [(String,a)]

以便您的类型参数化任意类型。如果您需要专门针对某个函数中的数字类型,那么您可以对每个函数单独进行专门化。例如:
foo :: Num a => List a
foo = [("Hello",1),("World",2)]

我们可以在数据类型中包含一个约束,如下所示:
data Num a => List a = List [(String,a)]

但是您仍然必须包含约束 Num a => ...在每个函数声明中,因此您实际上不会保存任何类型。出于这个原因,Haskell 程序员通常遵循“不要在数据声明中包含类型约束”的规则。

关于Haskell 为 Int 和 Double 打字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11013783/

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