Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.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 创建中缀函数_Haskell - Fatal编程技术网

Haskell 创建中缀函数

Haskell 创建中缀函数,haskell,Haskell,我目前正在尝试创建一个中缀函数|=(每个A都是B,三段论) (|=)::谓词事物->谓词事物->布尔 a |=b=[如果a==b则为真| x问题在于列表理解。你不能编写if…then…。if…then…else…是一个表达式,而不是语句 如果要返回True如果a的一个元素等于b的一个元素,则可以使用: 但是,这仅适用于谓词是列表的情况,或者在第二种情况下至少是一个可折叠的。不适用于自定义类型(这不是可折叠的)的实例。您的如果…那么首先需要一个否则。您能用文字解释一下这个函数要做什么吗?(类型谓词

我目前正在尝试创建一个中缀函数|=(每个A都是B,三段论)

(|=)::谓词事物->谓词事物->布尔

a |=b=[如果a==b则为真| x问题在于列表理解。你不能编写
if…then…
if…then…else…
是一个表达式,而不是语句

如果要返回
True
如果
a
的一个元素等于
b
的一个元素,则可以使用:


但是,这仅适用于
谓词
是列表的情况,或者在第二种情况下至少是一个
可折叠的
。不适用于自定义类型(这不是
可折叠的
)的实例。

您的
如果…那么
首先需要一个
否则
。您能用文字解释一下这个函数要做什么吗?(类型
谓词
事物
的定义也可能是必要的。)我不太理解您的尝试-一方面,您似乎试图返回某种类型的列表,它与声明的返回类型
Bool
不匹配。每当您遇到错误/拒绝时(解析或类型解析等),告诉错误是什么,以及消息指向的代码的确切位置。通常对于新手代码,错误消息是非常有用的线索。(Haskellers抱怨GHC错误报告的地方是密集、复杂的代码位。)
(|=) :: Predicate Thing -> Predicate Thing -> Bool
a |= b = [ if a == b then True | x <- a , y <- b ]
(|=) :: Predicate Thing -> Predicate Thing -> Bool
a |= b = or [ a == b | x <- a , y <- b ]
(|=) :: (Foldable f, Foldable g, Eq a) => f a -> g a -> Bool
a |= b = any (`elem` b) a