Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.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 Forall错误非法符号_Haskell - Fatal编程技术网

Haskell Forall错误非法符号

Haskell Forall错误非法符号,haskell,Haskell,我的程序中出现了以下错误: Illegal symbol '.' in type Perhaps you intended to use RankNTypes or a similar language extension to enable explicit-forall syntax: forall <tvs>. <type> 标准Haskell不支持您尝试使用的所有语法。为了使用它,您需要启用语言扩展,例如RankNTypes。有几种方法可以启用这

我的程序中出现了以下错误:

Illegal symbol '.' in type
    Perhaps you intended to use RankNTypes or a similar language
    extension to enable explicit-forall syntax: forall <tvs>. <type>

标准Haskell不支持您尝试使用的所有语法。为了使用它,您需要启用语言扩展,例如
RankNTypes
。有几种方法可以启用这些扩展,但最简单的方法是在源文件顶部添加一行,如下所示:

{-# LANGUAGE RankNTypes #-}
在GHCi中,在交互式提示下,您可以执行以下操作:

> set -XRankNTypes
但是,在这种情况下,我不知道您为什么会这样写:

complementar :: forall a. Eq a => Int -> [a] -> [a]
因为这相当于写作:

complementar :: Eq a => Int -> [a] -> [a]
这是标准的Haskell语法,不需要任何扩展

程序的另一个问题是检查
x
是否为偶数(即
(x/2)==divx2
表达式)在Haskell中不起作用。除法运算符“
/
”不能处理整数,因此必须先将
x
转换为浮点

这在这种情况下是可行的,但一般来说,基于浮点数相等的测试比较棘手,最好避免。检查一个整数是否可被另一个整数整除的更标准的方法是查看整数整除后的余数是否为零,您可以使用
rem
函数:

> 10 `rem` 2 == 0
True
> 7 `rem` 2 == 0
False
>
(如果必须处理负数,可能需要研究
rem
mod
之间的区别。)

在这种情况下,您可以使用一个库函数:

> even 10
True
> even 7
False
>

你试过按照建议做吗?:)将
{-#LANGUAGE RankNTypes#-}
添加到文件的顶部。对于这种特定情况,您只需删除
即可获得所有a。启用
ScopedTypeVariables
也有效。(不过还有其他错误,比如在
Int
上使用
/2
> even 10
True
> even 7
False
>