Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell输入Int';s和Double';s_Haskell_Typing - Fatal编程技术网

Haskell输入Int';s和Double';s

Haskell输入Int';s和Double';s,haskell,typing,Haskell,Typing,关于打字的简单问题 如果我输入ghci:t[(“a”,3)]我会返回[(“a,3)]::Num t=>[([Char],t)] 在一个文件中,我定义了一个类型: type list = [(String, Int)] 如何更改类型以支持我定义的类型的Ints和Doubles,与我在ghci中编写的类似?首先,您的代码中有一个错误。数据类型必须以大写字母开头: type List = [(String, Int)] (请注意,String是[Char]的类型同义词,即它们是完全相同的类型)。我

关于打字的简单问题

如果我输入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)]

但是您仍然必须在每个函数声明中包含约束
numa=>…
,因此实际上不保存任何类型。因此,Haskell程序员通常遵循“在数据声明中不包含类型约束”的规则。首先,代码中有一个错误。数据类型必须以大写字母开头:

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)]

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

谢谢,这正是我想要的。我会在几分钟内接受答案。请注意,
DataTypeContexts
在2010年就消失了。还有一件事,我有一个函数,它检查一个列表中的两个数字是否相等,使用constraint Num a=>会给我一个错误,即使用“==”无法推断(Eq a)。为了解决这个问题,我将约束更改为Eq a=>。。。这是最好的方法吗,因为我需要将Eq a=>约束添加到我的许多函数中。它应该与约束
Num a=>…
一起工作,因为
Num
实例取决于您已经定义了
Eq
实例。例如,代码
f::Num a=>a->Bool
(第1行)和
fx=x==x
(第2行)对我来说很好。您使用的编译器/解释器是什么,版本是什么?在最新的GHC中,
Num
不再包含
Eq
,因此,如果您同时进行比较和算术,则需要在签名中同时包含这两个约束。例如,
f::(Num a,Eq a)=>…
谢谢,这正是我想要的。我会在几分钟内接受答案。请注意,
DataTypeContexts
在2010年就消失了。还有一件事,我有一个函数,它检查一个列表中的两个数字是否相等,使用constraint Num a=>会给我一个错误,即使用“==”无法推断(Eq a)。为了解决这个问题,我将约束更改为Eq a=>。。。这是最好的方法吗,因为我需要将Eq a=>约束添加到我的许多函数中。它应该与约束
Num a=>…
一起工作,因为
Num
实例取决于您已经定义了
Eq
实例。例如,代码
f::Num a=>a->Bool
(第1行)和
fx=x==x
(第2行)对我来说很好。您使用的编译器/解释器是什么,版本是什么?在最新的GHC中,
Num
不再包含
Eq
,因此,如果您同时进行比较和算术,则需要在签名中同时包含这两个约束。即
f::(数值a,等式a)=>…